packagecom.ntru.demo.test.array;importjava.util.Arrays;publicclassArrayDemo06{publicstaticvoidmain(String[] args){int[] a ={1,2,3,9999,31231,543,21,3,23};System.out.println(a);//[I@6d6f6e28//打印數組元素Arrays.toStringSystem.out.println(Arrays.toString(a));Arrays.sort(a);//數組進行排序 升序System.out.println(Arrays.toString(a));Arrays.fill(a,2,4,0);//2 4 被0填充Arrays.fill(a,0);//數組填充, 將0填充System.out.println(Arrays.toString(a));}publicstaticvoidprintArray(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]+",");}}}}
冒泡排序
冒泡排序無疑是最出名的排序算法之一, 總共有八大排序.
冒泡排序的代碼相對簡單, 兩層循環, 外面冒泡輪數, 里層依次比較
時間復雜度O(n2)
packagecom.ntru.demo.test.array;importjava.util.Arrays;publicclassArrayDemo07{publicstaticvoidmain(String[] args){int[] a ={1,4,6,7,9,25,6,7};int[] sort =sort(a);System.out.println(Arrays.toString(sort));}/*冒泡排序比較數組中, 兩個相鄰元素, 如果第一個數比第二個數大, 我們該交換他們的位置每一次比較 都會產生一個最大的或者最小的數下一輪可以少1次排序一次循環 知道結束*/publicstaticint[]sort(int[] array){//定義臨時變量int temp =0;//外層循環for(int i =0; i < array.length-1; i++){boolean flag =false;//通過flag標識位減少沒有意義的比較//如果如果第一個數比第二個數大則交換位置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;}}
稀疏數組
需求: 編寫五子棋游戲中, 有存盤退出和續上盤的功能.
當一個數組中大部分元素為0, 或者為同一值的數組時, 可以使用稀疏數組來保存該數組.
稀疏數組的處理方式:
記錄數組一共有幾行幾列, 有多少個不同值.
把具有不同值的元素和列及值記錄在一個小規模的數組中, 從而縮小程序的規模.
packagecom.ntru.demo.test.array;publicclassArrayDemo08{publicstaticvoidmain(String[] args){/*創建一個二維數組 11*11 0: 沒有旗子 1 :黑棋 2: 白旗*/int[][] array1 =newint[11][11];array1[1][2]=1;array1[2][3]=2;///輸出原始數組System.out.println("輸出原始數組");for(int[] ints : array1){for(int anInt : ints){System.out.print(anInt +"\t");}System.out.println();}/*轉換為稀疏數組獲取有效值的個數*/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("有效值的個數: "+ sum);//創建一個稀疏數組的數組int[][] array2 =newint[sum +1][3];array2[0][0]=11;array2[0][1]=11;array2[0][2]= sum;//遍歷二維數組 將非零的值 存放稀疏數組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];}}}//輸出稀疏數組System.out.println("稀疏數組");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("還原");//讀取稀疏數組int[][] array3 =newint[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();}}}