1.冒泡排序介紹
冒泡排序(Bubble Sort),又被稱爲氣泡排序或泡沫排序。
它是一種較簡單的排序算法。它會遍歷若干次要排序的數列,每次遍歷時,它都會從前往後依次的比較相鄰兩個數的大小;如果前者比後者大,則交換它們的位置。這樣,一次遍歷之後,最大的元素就在數列的末尾! 採用相同的方法再次遍歷時,第二大的元素就被排列在最大元素之前。重複此操作,直到整個數列都有序爲止!
冒泡排序圖文說明
/*
* a -- 待排序的數組
* n -- 數組的長度
*/
public static void bubbleSort(int[] a, int n) {
int i,j;
for (i=n-1; i>0; i--) {
// 將a[0...i]中最大的數據放在末尾
for (j=0; j<i; j++) {
if (a[j] > a[j+1]) {
// 交換a[j]和a[j+1]
int tmp = a[j];
a[j] = a[j+1];
a[j+1] = tmp;
}
}
}
}
運行:
int[] a = {20,40,30,10,60,50,70};
String aa = "冒泡排序";
bubbleSort(a,a.length);
System.out.print(aa);
for (int d : a) {
System.out.print(d+",");
}
2.快速排序介紹
快速排序(Quick Sort)使用分治法策略。
它的基本思想是:選擇一個基準數,通過一趟排序將要排序的數據分割成獨立的兩部分;其中一部分的所有數據都比另外一部分的所有數據都要小。然後,再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數據變成有序序列。
快速排序流程:
-
從數列中挑出一個基準值。
-
將所有比基準值小的擺放在基準前面,所有比基準值大的擺在基準的後面(相同的數可以到任一邊);在這個分區退出之後,該基準就處於數列的中間位置。
-
遞歸地把"基準值前面的子數列"和"基準值後面的子數列"進行排序。
圖文介紹
代碼實現:
/**
*
* 參數說明:
* a -- 待排序的數組
* l -- 數組的左邊界(例如,從起始位置開始排序,則l=0)
* r -- 數組的右邊界(例如,排序截至到數組末尾,則r=a.length-1)
*/
public static void quickSort(int[] a, int l, int r) {
if (l < r) {
int i,j,x;
i = l;
j = r;
x = a[i];
while (i < j) {
while(i < j && a[j] > x)
j--; // 從右向左找第一個小於x的數
if(i < j)
a[i++] = a[j];
while(i < j && a[i] < x)
i++; // 從左向右找第一個大於x的數
if(i < j)
a[j--] = a[i];
}
a[i] = x;
quickSort(a, l, i-1); /* 遞歸調用 */
quickSort(a, i+1, r); /* 遞歸調用 */
}
}
運行:
String aa = "快速排序";
quickSort(a,0,a.length-1);
System.out.print(aa);
for (int d : a) {
System.out.print(d+",");
}