冒泡排序:java
package cn.edu.hdu.chenpi.plib; import java.util.Arrays; public class App { public static void main(String[] args) { Integer[] arr = { 49, 38, 65, 97, 76, 13, 27, 49 }; for (int i = 0; i < arr.length - 1; i++) { //用於提早結束判斷 boolean changeFlag = false; for (int j = 0; j < arr.length - i - 1; j++) { if (arr[j] > arr[j + 1]) { int tmp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = tmp; changeFlag = true; } } if (changeFlag == false) break; System.out.println("第" + (i + 1) + "次:" + Arrays.asList(arr)); } System.out.println(Arrays.asList(arr)); ; } }
快速排序:ui
package cn.edu.hdu.chenpi.plib; public class App { public static void main(String[] args) { int[] arr = { 49, 38, 65, 97, 76, 13, 27, 49 }; App.quickSort(arr, 0, arr.length - 1); for (int t : arr) { System.out.println(t); } } public static int trip(int[] arr, int begin, int end) { int c = arr[begin]; int i = begin, j = end; //最後一個空位 int index = 0; while (i < j) { //從後往前找 while (i < j && arr[j] >= c) { j--; } arr[i] = arr[j]; index = j; i++; if (i >= j) break; //從前日後找 while (i < j && arr[i] <= c) { i++; } arr[j] = arr[i]; index = i; j--; } arr[index] = c; //打印一趟排序後的結果 for (int t : arr) { System.out.print(t + " "); } System.out.println(index); return index; } public static void quickSort(int[] arr, int begin, int end) { if (begin < end) { int middle = App.trip(arr, begin, end); App.quickSort(arr, begin, middle - 1); App.quickSort(arr, middle + 1, end); } } }
選擇排序:在要排序的一組數中,選出最小的一個數與第一個位置的數交換;而後在剩下的數當中再找最小的與第二個位置的數交換,如此循環到倒數第二個數和最後一個數比較爲止。spa
插入排序:已排序+未排序兩部分,從已排序後面找一個值,插入到已排序,依次下去。。。code
希爾排序:blog
歸併排序:歸併(Merge)排序法是將兩個(或兩個以上)有序表合併成一個新的有序表,即把待排序序列分爲若干個子序列,每一個子序列是有序的。而後再把有序子序列合併爲總體有序序列。排序
堆排序:ip
n個元素的序列{k1,k2,…,kn}當且僅當知足下列關係之一時,稱之爲堆。io
情形1:ki <= k2i 且ki <= k2i+1 (最小化堆或小頂堆)class
情形2:ki >= k2i 且ki >= k2i+1 (最大化堆或大頂堆)import
若在輸出堆頂的最小值以後,使得剩餘n-1個元素的序列重又建成一個堆,則獲得n個元素的次小值。如此反覆執行,便能獲得一個有序序列,這個過程稱之爲堆排序。