JavaSort
Java經典排序算法代碼
2018-1-26更新:冒泡排序,選擇排序,插入排序,快速排序
1. 冒泡排序
- 特色:效率低,實現簡單
- 思想(從小到大排): 第1個數和第2個數比較,若是第1個數比第2個數小,則不動,若是第1個比第2個大,則交換。再比較第2個和第3個,若是第2個數比3個數小,則不動,若是第2個比第3個大,則交換。以此類推日後進行比較。一趟結束後,最大的數應該在最後一個(也可從後往前排)
public static void bubbleSort(int arr[]) { for(int i=0;i<arr.length-1;i++) { for(int j=0;j<arr.length-1-i;j++) { if(arr[j]>arr[j+1]) { int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } }
2. 選擇排序
- 特色:效率低,容易實現。
- 第一趟->第一個數和後面的數依次比較,大就換,小就不動,第一趟結束,第一個數爲最小的數。第二趟->第二個數和後面的數依次比較,大就換,小就不動,第二趟結束,第二個數爲第二小的數。
- 參考文章:http://www.javashuo.com/article/p-oplypbmn-cn.html
public static void selectSort(int arr[]) { for(int i=0;i<arr.length-1;i++) { for(int j=i+1;j<arr.length;j++) { if(arr[i]>arr[j]) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } }
3. 插入排序
- 特色:效率低,容易實現。
- 分而治之的思想。就是把一串數字分紅有序和無序的兩部分。好比 8 3 2 5,首先把8當作有序(他就一個數,固然有序),而後 3 2 5就是無序的部分,再把3 2 5 中的 3 拿出來做爲有序的部分 和 以前排好的有序部分 8 進行比較,發現 3 比 8 小,交換 如今排好的有序部分爲 3 8,剩下的無序部分爲 2 5 ,在剩下無序部分中把 2 當作有序,和排好的 3 8 依次比較,發現比3 小 ,交換 ,如今左邊排好的是 2 3 8 ,還剩一個5.繼續依次和排好的比較,2 比 5小,不交換,3 比 5 小不交換, 8 比5 大,交換,因此新的數組 2 3 5 8。
- 參考文章:http://www.javashuo.com/article/p-yntkcxox-u.html
public static void insertSort(int arr[]) { for(int i=1;i<arr.length;i++) { for(int j=i-1;j>=0;j--) { if(arr[j] > arr[j+1]) { int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } }
4. 快速排序
- 特色:高效,時間複雜度爲nlogn。
- 思想:設置2個指針low指向第一個數,指針high指向最後一個數,high從後往前找,和low的數比較,若是high的數比low的數小,交換.此時high不動,low從前日後找,找到一個數比high大,交換,直到low,high指向同一個數,結束第一次排序。
- 參考文章:http://blog.csdn.net/as02446418/article/details/47395867
public static void quickSort(int arr[],int low,int high) { int start = low; int end = high; int key = arr[low]; if(end<start) { return; } while(end>start) { //從後往前比 while(end > start && arr[end] >= key) {//若是沒有比關鍵值小的,比較下一個,直到有比關鍵值小的交換位置,而後又從前日後比較 end--; if(arr[end]<=key) { int temp = arr[end]; arr[end] = arr[start]; arr[start] = temp; } } //從前日後比 while(end > start && arr[start]<=key) {//若是沒有比關鍵值大的,比較下一個,直到有比關鍵值大的交換位置 start++; if(arr[start]>=key) { int temp = arr[start]; arr[start] = arr[end]; arr[end] = temp; } } //此時第一次循環比較結束,關鍵值的位置已經肯定了。 //左邊的值都比關鍵值小,右邊的值都比關鍵值大,可是兩邊的順序還有多是不同的,進行下面的遞歸調用 } //遞歸 if(start>low) quickSort(arr,low,start-1);//左邊序列。第一個索引位置到關鍵值索引-1 if(end<high) quickSort(arr,end+1,high); //右邊序列。從關鍵值索引+1到最後一個 }
詳細代碼能夠去個人Github:https://github.com/weiliangchun/JavaSorthtml
Java初級開發技術交流羣:619201650。歡迎加入進行技術交流,禁止閒聊、鬥圖。git