本文共 1140 字,大约阅读时间需要 3 分钟。
为了实现快速排序,我们需要选择一个枢轴元素,将数组分为左右两部分,分别递归排序。以下是详细步骤:
以下是实现代码:
#include#include #include #include #include using namespace std;void qst(int a[], int l, int r) { if (l >= r) return; int key = a[l]; int i = l + 1; int j = r; // 将右边所有小于等于key的元素移到j的位置 while (j > l && a[j] <= key) { j--; } // 将左边所有大于key的元素移到i的位置 while (i <= j && a[i] > key) { a[j] = a[i]; j--; i++; } a[j] = key; // 递归处理左右子数组 qst(a, l, j - 1); qst(a, j + 1, r);}int main() { int n; cin >> n; int a[n]; for (int i = 0; i < n; i++) { scanf("%d", &a[i]); } qst(a, 0, n - 1); for (int i = 0; i < n; i++) { printf("%d ", a[i]); } return 0;}
代码解释:
scanf读取输入数据,存入数组a。qst: key。key的元素到右边。key的元素到右边。该实现确保了快速排序的正确性,时间复杂度为O(N log N),适用于N ≤ 10^5。
转载地址:http://lpzsz.baihongyu.com/