一、冒泡排序
比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最后一對。在這一點,最后的元素應該會是最大的數。
針對所有的元素重復以上的步驟,除了最后一個,即需要進行length-1次。
第一次是對n個數進行n-1次比較,進行到最后第n個的一個是最大的;
第二次是對n-1個數進行n-2次比較,進行到最后第n-1個的一個是最大的;
......
持續每次對越來越少的元素重復上面的步驟,直到沒有任何一對數字需要比較。
實現代碼如下:
1 public static void bubbleSort(int[] arr){ 2 for (int i = 0; i < arr.length; i++) { 3 for (int j = 0; j < arr.length - i - 1; j++) { 4 if (arr[j] > arr[j + 1]){//如果比后一個大,就交換 5 int temp = arr[j]; 6 arr[j] = arr[j + 1]; 7 arr[j + 1] = temp; 8 } 9 } 10 } 11 }
三、選擇排序
選擇排序原理即是,遍歷元素找到一個最小(或最大)的元素,把它放在第一個位置,然后再在剩余元素中找到最小(或最大)的元素,把它放在第二個位置,依次下去,完成排序。
實現代碼如下:
1 public static void selectSort(int[] arr){ 2 3 for (int i = 0; i < arr.length; i++) { 4 int minIndex = i;//用來記錄最小值的索引 5 for (int j = i; j < arr.length; j++) { 6 if (arr[j] < arr[minIndex]) { // minIndex = arr[j] < arr[minIndex] ? j : minIndex; 7 minIndex = j; //用三元運算符可減少代碼量 8 } // 9 } 10 int temp = arr[i];//將最小的值換到第i個位置 11 arr [i] = arr[minIndex]; 12 arr [minIndex] = temp; 13 14 } 15 }
二、插入排序
插入排序與打撲克時整理手上的牌非常類似。摸來的第1張牌無須整理,此后每次從桌上的牌(無序區)中摸最上面的1張並插入左手的牌(有序區)中正確的位置上。為了找到這個正確的位置,須自左向右(或自右向左)將摸來的牌與左手中已有的牌逐一比較。
實現代碼如下:
1 public static void insertSort(int[] arr){ 2 for (int i = 0; i < arr.length; i++) { 3 for (int j = i; j > 0 ; j--) {//往前比較 4 if (arr[j] < arr[j-1]){ 5 int temp = arr[j]; 6 arr[j] = arr[j - 1]; 7 arr[j - 1] = temp; 8 } 9 } 10 } 11 }