// 快速排序 // 平均时间复杂度: O(NlogN) - 最差时间复杂度: O(N^2) #include int a[101], n; // 定义全局变量,这两个变量需要在子函数中使用 void quicksort(int left, int right) { int i, j, t, temp; if (left > right) return; temp = a[left]; // temp 中存的就是基准数 i = left; j = right; while (i != j) { // 顺序很重要,要先从右往左找 while (a[j] >= temp && i < j) j--; // 在从左往右找 while (a[i] <= temp && i < j) i++; if (i < j) { t = a[i]; a[i] = a[j]; a[j] = t; } } // 最终将基准数归位 (交换基准数和 i 位置当前值) a[left] = a[i]; a[i] = temp; // temp 在上面有定义 quicksort(left, i - 1); // 继续处理左边的,这里是一个递归的过程 quicksort(i + 1, right); // 继续处理右边的 return; } 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 ", a[i]); printf("\n"); return 0; }