Java_基礎之數組排序(從小到大)
1、冒泡排序:
冒泡排序可以寫成兩層循環。
每次循環將最大的數值交換到數組的最后一個。
每排序完一次,后面就少比較一次。所以二層循環的判斷條件寫成:arry.length-1-i
2、選擇排序:
選擇排序可以寫成兩層循環。
每次排序會選擇出數組中最小的數,將其交換到數組的第一位。
平均時間復雜度都是:O(n^2)
冒泡排序穩定,選擇排序不穩定。
Java里面有一個自動排序的函數:Arrays.sort();
手寫排序,讓我們更好的理解算法,這兩個排序為最簡單的排序算法 。
想找一份好的工作和工資比較高的,就要好好學好算法。
以下將是數組排序的代碼:
1 /* 2 * Java的簡單數組排序(從小到大) 3 * 1、冒泡排序 4 * 2、選擇排序 5 * 平均時間復雜度都是:O(n^2) 6 * 冒泡排序穩定,選擇排序不穩定。 7 */ 8 package com.basis; 9 10 public class ArraySort { 11 12 public static void main(String[] args) { 13 int[] arry = {1,9,7,25,15,36,99,100,85,45,20,10,3}; //數組初始化 14 System.out.print("原始數組:"); 15 Print(arry); 16 System.out.print("\n冒泡排序:"); 17 Print(BubbleSort(arry)); 18 System.out.print("\n選擇排序:"); 19 Print(SelectionSort(arry)); 20 System.out.print("\n改進的選擇排序:"); 21 Print(SelectionSortChange(arry)); 22 } 23 24 //冒泡排序 25 public static int[] BubbleSort(int arry[]){ 26 for(int i=0;i<arry.length-1;i++){ 27 for(int j=0;j<arry.length-1-i;j++){ 28 if(arry[j]>arry[j+1]){ //交換過程 29 int temp = arry[j]; 30 arry[j] = arry[j+1]; 31 arry[j+1] = temp; 32 } 33 } 34 } 35 return arry; 36 } 37 38 //選擇排序 39 public static int[] SelectionSort(int arry[]){ 40 for(int i=0;i<arry.length;i++){ 41 for(int j=i;j<arry.length;j++){ 42 if(arry[i]>arry[j]){ //交換過程 43 int temp = arry[i]; 44 arry[i] = arry[j]; 45 arry[j] = temp; 46 } 47 } 48 } 49 return arry; 50 } 51 52 /* 53 * 改進: 54 * 先判斷,若符合,先不要立刻去交換兩個數,把小的那個數組的數下標存起來, 55 * 全部比較完再交換,每次循環只需要交換一次或着不交換 56 */ 57 //改進的選擇排序 58 public static int[] SelectionSortChange(int arry[]){ 59 for(int i=0;i<arry.length;i++){ 60 int index=i; //標記數組下標 61 for(int j=i;j<arry.length;j++){ 62 if(arry[index]>arry[j]){ //每一次循環找出數組的值為最小的下標 63 index=j; 64 } 65 } 66 if(index != i){ 67 int temp = arry[index]; 68 arry[index] = arry[i]; 69 arry[i] = temp; 70 } 71 } 72 return arry; 73 } 74 75 //數組的輸出 76 public static void Print(int arry[]){ 77 for(int i=0;i<arry.length;i++){ 78 System.out.print(arry[i]+" "); 79 } 80 } 81 }
運行的結果: