排序算法-Java實現

常見的八種排序分類: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

相關文章
相關標籤/搜索