快排算法
(一)大体思路
1.取分界点
高位和低位相遇的点
2.分成两部分
基于相遇的点可划分为两部分
3.各自排大小
将左右两边各自排序,最后结合在一起。
(二)问题
1.分界点怎么选择?
2.高位点与低位电如何移动?
(三)代码
#include <iostream>
using namespace std;
void QuickSort(int *arr,int l,int r)
{
if(l>=r) return;
int point=arr[l],i=l-1,j=r+1;
while(i<j)
{
do i++; while(arr[i]<point);
do j--; while(arr[j]>point);
if(i<j)swap(arr[i],arr[j]);
}
QuickSort(arr,l,j);
QuickSort(arr,j+1,r);
}
int main()
{
int arr[]={1,5,6,7,9,2,4};
QuickSort(arr,0,sizeof(arr)/sizeof(int)-1);
for (int i = 0; i < sizeof(arr)/sizeof(int); i++)
{
cout << arr[i] << " ";
}
return 0;
}
(四)练习题