常見的八種排序分類:java
【冒泡排序】數組
原理:相鄰兩個數據進行兩兩比較,較大的放在右側,較小的放在左側。從開始到最後,因此最後一位是最大的。重複上述操做,除了最後一個ide
Java代碼:ui
1 for (int i = 0; i < arr.length - 1; i++) { 2 for (int j = 0; j < arr.length - i - 1; j++) { 3 if (arr[j] > arr[j + 1]) { 4 int temp = arr[j]; 5 arr[j] = arr[j + 1]; 6 arr[j + 1] = temp; 7 } 8 } 9 }
【快速排序】spa
原理:先從數列中取出一個數做爲key值;將比這個數小的數所有放在它的左邊,大於或等於它的數所有放在它的右邊;對左右兩個小數列重複第二步,直至各區間只有1個數.net
java代碼:code
1 public static void quickSort(int[] arr, int low, int high) { 2 int i, j, temp, t; 3 if (low > high) return; 4 i = low; 5 j = high; 6 //temp就是基準位 7 temp = arr[low]; 8 9 while (i < j) { 10 //先看右邊,依次往左遞減 11 while (temp <= arr[j] && i < j) { 12 j--; 13 } 14 //再看左邊,依次往右遞增 15 while (temp >= arr[i] && i < j) { 16 i++; 17 } 18 //若是知足條件則交換 19 if (i < j) { 20 t = arr[j]; 21 arr[j] = arr[i]; 22 arr[i] = t; 23 } 24 25 } 26 //最後將基準爲與i和j相等位置的數字交換 27 arr[low] = arr[i]; 28 arr[i] = temp; 29 //遞歸調用左半數組 30 quickSort(arr, low, j - 1); 31 //遞歸調用右半數組 32 quickSort(arr, j + 1, high); 33 }
【插入排序】blog
原理:直接插入排序是將一個待排序的記錄,插入到前面已經排好序的有序序列中去,如此反覆循環,直到所有排好順序爲止。排序
1 public void insertSort() { 2 int i, j, temp; 3 for (i = 1; i < array.length; i++) { 4 temp = array[i]; 5 for (j = i - 1; j >= 0; j--) { 6 if (temp > array[j]) { 7 break; 8 } else { 9 array[j + 1] = array[j]; 10 } 11 } 12 array[j + 1] = temp; 13 } 14 }
【選擇排序】遞歸
原理:簡單選擇排序是每一趟從待排序的數據元素中選擇最小(或最大)的一個元素做爲首元素,直到全部元素排完爲止,屬於不穩定排序。
1 public void selectSort() { 2 int i, j, index; 3 for (i = 0; i < array.length; i++) { 4 index = i; 5 for (j = i + 1; j < array.length; j++) {//遍歷找到最小值 6 if (array[j] < array[index]) { 7 index = j; 8 } 9 }//將遍歷出來的最小值,放在前面 10 int temp = array[i]; 11 array[i] = array[index]; 12 array[index] = temp; 13 } 14 }
參考文檔:
https://baijiahao.baidu.com/s?id=1630690516749462635&wfr=spider&for=pc
https://blog.csdn.net/qq_42857603/article/details/81605124