快速排序
#include <stdio.h> #include <stdlib.h> #include <string.h> void quick_sort(int data[], int, int); int partition(int data[], int, int); int main( int argc, char* argv[] ) { int data[8] = {2, 8, 7, 1, 3, 5, 6, 4}; quick_sort(data, 0, 7); for (int i = 0; i < 8; i++) { printf("%d ", data[i]); } system("pause"); return 0; } void quick_sort(int data[], int low, int high) { if (low < high) { int p = partition(data, low, high); quick_sort(data, low, p - 1); quick_sort(data, p + 1, high); } } int partition(int data[], int low, int high) { int i, j; int r, temp; r = data[high];//此处不可以使用data[low]。 i = low - 1; for (j = low ; j < high; j++) { if (data[j] <= r) //此处使用“<=”,而不是“<”。其实,两种用法都对,但是推荐使用“<=”。 { i++; temp = data[i]; data[i] = data[j]; data[j] = temp; } } temp = data[high]; data[high] = data[i + 1]; data[i + 1] = temp; return i + 1; }
快速排序不是稳定的排序算法!例如,2, 3, 6, 61, 5, 4.使用上述算法后,结果是2, 3, 4, 5, 61, 6.