快速排序-分治法
Step:
- 确定分界点:q[l] q[(hr)/2] q[r] 随机
- 调整区间:第一个区间的所有数小于等于x(左半边),第二个区间的所有数大于等于x(右半边)。
- 递归:处理左右两端,两边分别排好序
①a[ ],b[]
②q[l~r]:q[ ]≤x放a[ ],q[ ]≥x放b[ ].
③a[ ]、b[ ]→q
代码如下:
#include<iostream>
using namespace std;
int midfind(int a[], int left, int right) {
int key = a[left];
while (left < right) {
while (a[right] >= key && left < right) right--;
a[left] = a[right];
while (a[left] <= key && left < right) left++;
a[right] = a[left];
}
a[left] = key;
return left;
}
void quicksort(int a[], int left, int right) {
if (left < right) {
int mid = midfind(a,left,right);
quicksort(a, left, mid - 1);
quicksort(a, mid + 1, right);
}
}
int main()
{
int a[] = { 8,20,1,3,56,77,44 };
for (int i = 0; i < 7; i++)
cout << a[i] << " ";
cout << endl;
quicksort(a, 0, 6);
for (int i = 0; i < 7; i++)
cout << a[i] << " ";
cout<<endl;
return 0;
}