// another variant static void quick_sort3(int32_t *a, int32_t low, int32_t high) { int32_t i, j, p, aux; if (high <= low + 1) return; i = low; j = high - 1; p = a[i]; i ++; while (i <= j) { if (a[i] < p) { i ++; } else { aux = a[i]; a[i] = a[j]; a[j] = aux; j --; } } a[low] = a[j]; a[j] = p; quick_sort3(a, low, j); quick_sort3(a, j+1, high); }
void quick_sort3(int array[], int low, int high) { while (low < high) { int pivot = three_one_partition(array, low, high); if (pivot - low < high - pivot) { quick_sort3(array, low, pivot-1); low = pivot+1; } else { quick_sort3(array, pivot+1, high); high = pivot-1; } } }
int main(int argc, char *argv[]) { // int array[] = {2, 8, 7, 1, 3, 5, 6, 4}; int array[] = {256, 19, 3, 21, 7, 5, 18}; int array_length = sizeof(array) / sizeof(array[0]); // bubble_sort0(array, array_length); // bubble_sort(array, array_length); // bubble_sort2(array, array_length); // select_sort(array, array_length); // insert_sort(array, array_length); // shell_sort(array, array_length); // heap_sort(array, array_length); // merge_sort(array, 0, array_length); quick_sort3(array, 0, array_length-1); //快排这个地方调用的时候第三个参数到底减不减1?效果都一样 //调用时第三个参数应该为array_length-1, //因为算法导论中的数组是这么写的A[p,r] A[r]为边界元素 for (int i = 0; i < array_length; ++i) { printf ("%d ", array[i]); } printf ("\n"); return 0; }
static void sort3(int32_t *a, int32_t n) { quick_sort3(a, 0, n); }