日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

多维数组(冒泡排序,稀疏数组)

發(fā)布時(shí)間:2024/4/11 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 多维数组(冒泡排序,稀疏数组) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

多維數(shù)組

  • 多維數(shù)組可以看成是數(shù)組的數(shù)組, 比如二維數(shù)組就是一個(gè)特殊的一維數(shù)組, 其每1個(gè)元素都是一個(gè)一維數(shù)組.

  • 二維數(shù)組

    int a[][] = new int[2][5];

    以上二維數(shù)組可以看成一個(gè)兩行五列的數(shù)組

  • 多維數(shù)組的使用

package com.ntru.demo.test.array;public class ArrayDemo05 {public static void main(String[] args) {//[4][2] 面向?qū)ο?/span>/*1,2 array[0]2,3 array[1]3,4 array[2]4,5 array[3]*/int[][] array = {{1,2},{2,3},{3,4},{4,5}};System.out.println(array[2][0]);System.out.println(array[2][1]);System.out.println(array.length);System.out.println(array[0].length);for (int i = 0; i < array.length; i++) {for (int j = 0; j < array[i].length; j++) {System.out.println(array[i][j]);}}} }

Arrays類

  • 數(shù)組的工具類 java.util.Arrays
  • 由于數(shù)組對(duì)象本身并沒有什么方法可以供我們調(diào)用, 但API中提供了一個(gè)工具類Arrays供我們使用, 從而可以對(duì)數(shù)據(jù)對(duì)象進(jìn)行一些基本操作.
  • 查看JDK幫助文檔
  • Arrays類中的方法都是static修飾的靜態(tài)方法, 在使用的時(shí)候可以直接使用類名進(jìn)行調(diào)用, 而"不用"使用對(duì)象來調(diào)用(注意: 是"不用"而不是"不能")
  • 具有以下常用功能
    • 給數(shù)組賦值: 通過fill方法
    • 給數(shù)組排序: 通過sort方法, 按升序
    • 比較數(shù)組, 通過equals方法比較數(shù)組中元素值是否相等
    • 查找數(shù)組元素: 通過binarySearch方法能對(duì)排序好的數(shù)組進(jìn)行二分查找操作
package com.ntru.demo.test.array;import java.util.Arrays;public class ArrayDemo06 {public static void main(String[] args) {int[] a = {1,2,3,9999,31231,543,21,3,23};System.out.println(a);//[I@6d6f6e28//打印數(shù)組元素Arrays.toStringSystem.out.println(Arrays.toString(a));Arrays.sort(a);//數(shù)組進(jìn)行排序 升序System.out.println(Arrays.toString(a));Arrays.fill(a,2,4,0);//2 4 被0填充Arrays.fill(a,0);//數(shù)組填充, 將0填充System.out.println(Arrays.toString(a));}public static void printArray(int[] a){for (int i = 0; i < a.length; i++) {if(i==0){System.out.print("[");//不換行}if(i==a.length-1){System.out.print(a[i]+"]");}else{System.out.print(a[i]+",");}}} }

冒泡排序

  • 冒泡排序無疑是最出名的排序算法之一, 總共有八大排序.
  • 冒泡排序的代碼相對(duì)簡單, 兩層循環(huán), 外面冒泡輪數(shù), 里層依次比較
  • 時(shí)間復(fù)雜度O(n2)
package com.ntru.demo.test.array;import java.util.Arrays;public class ArrayDemo07 {public static void main(String[] args) {int[] a = {1,4,6,7,9,25,6,7};int[] sort = sort(a);System.out.println(Arrays.toString(sort));}/*冒泡排序比較數(shù)組中, 兩個(gè)相鄰元素, 如果第一個(gè)數(shù)比第二個(gè)數(shù)大, 我們?cè)摻粨Q他們的位置每一次比較 都會(huì)產(chǎn)生一個(gè)最大的或者最小的數(shù)下一輪可以少1次排序一次循環(huán) 知道結(jié)束*/public static int[] sort(int[] array){//定義臨時(shí)變量int temp = 0;//外層循環(huán)for (int i = 0; i < array.length-1 ; i++) {boolean flag = false;//通過flag標(biāo)識(shí)位減少?zèng)]有意義的比較//如果如果第一個(gè)數(shù)比第二個(gè)數(shù)大則交換位置for (int j = 0; j < array.length-1 ; j++) {if(array[j+1] < array[j]){temp = array[j];array[j] = array[j+1];array[j+1] = temp;flag = true;}}if(flag==false){break;}}return array;} }

稀疏數(shù)組

  • 需求: 編寫五子棋游戲中, 有存盤退出和續(xù)上盤的功能.

  • 當(dāng)一個(gè)數(shù)組中大部分元素為0, 或者為同一值的數(shù)組時(shí), 可以使用稀疏數(shù)組來保存該數(shù)組.

  • 稀疏數(shù)組的處理方式:

    • 記錄數(shù)組一共有幾行幾列, 有多少個(gè)不同值.
    • 把具有不同值的元素和列及值記錄在一個(gè)小規(guī)模的數(shù)組中, 從而縮小程序的規(guī)模.
package com.ntru.demo.test.array;public class ArrayDemo08 {public static void main(String[] args) {/*創(chuàng)建一個(gè)二維數(shù)組 11*11 0: 沒有旗子 1 :黑棋 2: 白旗*/int[][] array1 = new int[11][11];array1[1][2] = 1;array1[2][3] = 2;///輸出原始數(shù)組System.out.println("輸出原始數(shù)組");for (int[] ints : array1) {for (int anInt : ints) {System.out.print(anInt + "\t");}System.out.println();}/*轉(zhuǎn)換為稀疏數(shù)組獲取有效值的個(gè)數(shù)*/int sum = 0;for (int i = 0; i < 11; i++) {for (int j = 0; j < 11; j++) {if (array1[i][j] != 0) {sum++;}}}System.out.println("有效值的個(gè)數(shù): " + sum);//創(chuàng)建一個(gè)稀疏數(shù)組的數(shù)組int[][] array2 = new int[sum + 1][3];array2[0][0] = 11;array2[0][1] = 11;array2[0][2] = sum;//遍歷二維數(shù)組 將非零的值 存放稀疏數(shù)組int count = 0;for (int i = 0; i < array1.length; i++) {for (int j = 0; j < array1[i].length; j++) {if (array1[i][j] != 0) {count++;array2[count][0] = i;array2[count][1] = j;array2[count][2] = array1[i][j];}}}//輸出稀疏數(shù)組System.out.println("稀疏數(shù)組");for (int i = 0; i < array2.length; i++) {System.out.println(array2[i][0] + "\t" + array2[i][1] + "\t" + array2[i][2] + "\t");}System.out.println("-------------");System.out.println("還原");//讀取稀疏數(shù)組int[][] array3 = new int[array2[0][0]][array2[0][1]];//給其中的元素還原它的值for (int i = 1; i < array2.length; i++) {array3[array2[i][0]][array2[i][1]] = array2[i][2];}//打印System.out.println();for (int[] ints : array3) {for (int anInt : ints) {System.out.print(anInt + "\t");}System.out.println();}} }

總結(jié)

以上是生活随笔為你收集整理的多维数组(冒泡排序,稀疏数组)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。