算法思想:java
private static void Sort(int[] a) {
boolean tag;//用於判斷實時的數組是否已經有序
for (int i = 0; i < a.length - 1; i++) {
//總共須要a.length-1趟排序,由於每趟只歸位一個元素,需將a.length-1個元素歸位便可使整個數組有序
tag = true;//每趟開始以前將標誌置爲true
for (int j = 0; j < a.length - 1- i; j++) {
//第i趟只須要比較a.length-i-1次,如:第一趟只須要比較a.length-1次
if (a[j] > a[j + 1]) {
int temp = 0;
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
tag = false;//發生交換就將標誌位置爲false,表示當前數組尚未徹底有序;
}
}
if (tag) {//進行一趟完整的排序後沒有發生交換則說明已經排序完成;
return;//結束排序
}
}
}複製代碼
效率及穩定性:
算法
public static void quickSort(int[] a) {
if (a.length > 0) {
quickSort(a, 0, a.length - 1);
}
}
//核心遞歸體
private static void quickSort(int[] a, int low, int high) {
//遞歸出口
if (low > high) {
return;
}
int i = low;
int j = high;
int key = a[low]; //基準元素取第一個元素,取其餘的直接改就行,2八、29行也要改
//完成一趟排序
while (i != j) {//每當ij相等時跳出外層循環,每完成一趟遍歷ij都是相等的;
while (a[j] > key) {//從右往左找到第一個小於等於key的數
j--;
}
while (a[i] <= key && i < j) {//從左往右找到第一個大於key的數,等於時也繼續,i<j保證i不可能大於j
i++;
}
//交換兩數字位置
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
//調整key的位置,將key的位置與ij相遇的位置交換
int temp = a[i];
a[i] = a[low];
a[low] = temp;
//對key左邊的數進行排序
quickSort(a, low, i - 1);
//對key右邊的數進行排序
quickSort(a, i + 1, high);
}
複製代碼