可自己创建数组,找到一个基准,一般为第一个,从后面往前面扫描,小于这个的放到这个基准的前面,从前面往后面扫描,大于这个的放到基准的后面。最终将基准插入正确的位置。再递归调用基准的左边和右边进行快速排序。
#include <iostream>
using namespace std;
//int a[10001],n;
void disp(int a[], int n) {
for (int i = 0; i < n; i++) {
cout << a[i] << " ";
}
cout << endl;
}
int HuaFen(int a[] , int s, int t) {
int i = s, j = t;
int tmp = a[s];
while (i != j) {
// 终止条件是从后面查找,找到一个比a[i]小的数,放到a[i]的位置上
while (j > i && a[j] >= tmp)
j--;
a[i] = a[j];
// 终止条件是从后面查找,找到一个比a[i]小的数,放到a[i]的位置上
while (i < j && a[i] <= tmp)
i++;
a[j] = a[i];
}
a[i] = tmp; // 将tmp放到a[i]的位置上
return i;
}
void QuickSort(int a[], int s, int t) {
// 递归终止条件 s>=t
if (s < t) {
int i = HuaFen(a, s, t); //用i将数组划分为两个区间[s,i-1],i,[i+1,t]
QuickSort(a, s, i - 1); //调用递归
QuickSort(a, i + 1, t);
}
}
int main() {
/*cin >> n;
for (int i = 0; i < n; i++) {
cin >> a[i];
}*/
int a[] = { 0,4,6,3,7,8,5,9,1,2 };
int n = sizeof(a) / sizeof(a[0]);
cout << "元素的个数为:" << n << endl;
cout << "排序前的数组为:";
disp(a, n);
QuickSort(a, 0, n-1);
cout << "排序后的数组为:";
disp(a, n);
return 0;
}