数据结构:快速排序算法

mac2024-04-14  36

代码参考书上

#include<iostream> #include<string.h> using namespace std; int a[100]; int n; int quickSort(int lo, int hi) { int pivot = a[lo]; while (lo < hi) { while (lo < hi&&pivot <= a[hi]) hi--;//先把轴点与右端的数字比较,如果小于轴点,则停止比较 (这是升序排序,如果需要降序排序,则改变比较的符号即可 a[lo] = a[hi];//一开始a[lo]为轴点的数字,轴点已保存,因此不会有数字被覆盖 while (lo < hi&&pivot >= a[lo]) lo++; a[hi] = a[lo]; } a[lo] = pivot; return lo; } void QS(int lo, int hi) { if (lo == hi) return;//只有1个数字,则直接返回 int pivot = quickSort(lo, hi);//构造轴点 if (pivot > 0 && lo < hi) QS(lo, pivot - 1); if (pivot < n && lo < hi) QS(pivot + 1, hi); } int main() { while (cin >> n) { memset(a, 0, sizeof(a)); for (int i = 0; i < n; i++) { cin >> a[i]; } QS(0, n - 1); for (int i = 0; i < n; i++) { cout << a[i] << " "; } cout << endl; } }
最新回复(0)