#include int a[101], n; // 定义全局变量,这两个变量需要在子函数中使用 void quicksort(int left, int right) { int i, j, temp; // 定义局部变量 if (left > right) return; // 结束递归 temp = a[left]; // temp中存的就是基准数 i = left; // i中存的就是左边的坐标,最左边的坐标就是基准数的坐标 j = right; // j中存的就是右边的坐标 while (i != j) { // 找到右边小于基准数的数 // 顺序很重要,要先从右边开始找 while (a[j] >= temp && i < j) j--; // 找到左边大于基准数的数 // 再从左往右边找 while (a[i] <= temp && i < j) i++; // 当左右两边的数都找到,而且没有重合时,交换两个数在数组中的位置 if (i < j) { // 使用异或运算交换两个数 a[i] = a[i] ^ a[j]; a[j] = a[i] ^ a[j]; a[i] = a[i] ^ a[j]; } } // 最终将基准数归位 a[left] = a[i]; a[i] = temp; quicksort(left, i - 1); // 继续处理左边的,这里是一个递归的过程 quicksort(i + 1, right); // 继续处理右边的,这里是一个递归的过程 } int main() { int i, j; // 读入数据 scanf("%d", &n); for (i = 1; i <= n; i++) scanf("%d", &a[i]); quicksort(1, n); // 快速排序调用 // 输出排序后的结果 for (i = 1; i <= n; i++) printf("%d\t", a[i]); getchar(); getchar(); return 0; }