#include"iostream"
using namespace std ;
// 实现交换。
void swap(int &a,int &b)
{
int temp;
temp=a;
a=b;
b=temp;
}
int partition(int *a,int L,int R)
{
// 默认的中间值为 L这个值
int P=*(a+L);
// 左边指针
int i=L;
// 右边指针。
int j=R;
// 直到i>=j
while(i<j)
{
// 直到i选择到大于p的数
while(a[i]<P and i<j) i++;
// 直到j选择到小于p的数
while(a[j]>P and i<j)j--;
// 使小于p的数在左边,大于p的数在右边。
swap(a[i],a[j]);
}
// 吧p的这个值放在中间。
swap(a[i-1],a[L]);
// 返回这个中间位置。
return i;
}
void quicklySort(int *a,int L,int R)
{
// 确保l始终在r的左边
if(L<R)
{
// 得到中间位置,p的左边的值小,p右边的值大。
int p=partition(a,L,R);
// 对l到p-1这边进行排序
quicklySort(a,L,p-1);
// 对p+1到r这边进行排序。
quicklySort(a,p+1,R);
}
}
int main()
{
int a[10]={4,2,3,1,0,9,8,7,6,5};
// 对数组进行快速排序。
quicklySort(a,0,9);
for(int i=0;i<10;i++)
{
cout<<*(a+i)<<endl;
}
cout<<endl;
return 0;
}
C++ 快速排序,双头选择法。
最新推荐文章于 2024-09-14 16:21:49 发布