快速排序
快排的思想主要在於每次劃分確定一個元素的位置,使其左側的元素均小於它,右側的元素均大於它,再對左右兩側遞迴。
int partition(int a[], int low, int high) { int x = a[high]; // 先以最右側作為樞軸 int j = low - 1; // j記錄的是最後一個比樞軸小的位置 for (int i = low; i < high; i++) { if (a[i] < x) // 如果a[i]比樞軸小,就將j右移一個單位,並交換i和j所指元素 { int temp; j++; temp = a[j]; a[j] = a[i]; a[i] = temp; } } a[high] = a[j + 1]; // 迴圈結束後,從low到j的位置所對應的元素均小於樞軸,將第j+1個元素和樞軸位置交換 a[j + 1] = x; return j + 1; } void quickSort(int a[], int low, int high) { if (low < high) { int middle = partition(a, low, high); quickSort(a, low, middle - 1); quickSort(a, middle + 1, high); } }
未完待續