快速排序 思想:建立哨兵(key),与哨兵对比,小的放前,大的放后 取 left 为 key,然后从右【左】两边循环对比,直到 j(右) 比 key 小【或 i(左) 比 key 大】,将 i 和 j 的值进行交换(在这里没另外定义一个变量,利用key来实现 i 和 j 的交换,因此需要从右边开始判断)直到 i 和 j 相等时退出循环,在利用递归进行 1 的操作 #include <stdio.h> void sort(int *data, int left, int right) { int i, j, key; i = left; j = right; key = data[left]; if (right <= left) return; while (i != j) { while (i < j && key <= data[j]) { j--; } data[i] = data[j]; while (i < j && key >= data[i]) { i++; } data[j] = data[i]; } data[i] = key; sort(data, left, i - 1); sort(data, i + 1, right); } void quick_sort(int *data, int length) { sort(data, 0, length - 1); } int main(void) { int data[] = {56, 34, 54, 50, 81, 70, 7, 74, 26, 65, 71, 4, 37, 76, 91, 36}; int length = sizeof(data) / sizeof(data[0]); int i; quick_sort(data, length); for (i = 0; i < length; i++) { printf("%4d", data[i]); } printf("\n"); return 0; }