算法导论上面说在选取基准元素是取得最后一个,数据结构课本上面是取第一个;
不过没有原理都是一样的;通过Qartion(int a[],int l,int r)函数将数组a中元素划分为三部分,比a[r]小的,比a[r]大的,a[r];
最后返回基准元素所在的位置;
#include <stdio.h>
#include <iostream>
#include <string.h>
#include <algorithm>
#include <math.h>
using namespace std;
const int N=99;
int Qartion(int a[],int l,int r)
{
int tmp=a[r];
int i=l-1;
for(int j=l;j<=r-1;j++)
{
if(a[j]<=tmp)
{
i++;
swap(a[i],a[j]);
}
}
swap(a[i+1],a[r]);
return i+1;
}
void Qsort(int a[],int l,int r)
{
if(l<r)
{
int p=Qartion(a,l,r);
Qsort(a,l,p-1);
Qsort(a,p+1,r);
}
}
int main()
{
int n;
while(~scanf("%d",&n))
{
int a[100];
for(int i=0;i<n;i++)
{
cin>>a[i];
}
Qsort(a,0,n-1);
for(int i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
}
return 0;
}
快速排序详解
本文详细介绍了快速排序算法的实现过程,包括选取基准元素的方法及其划分数组的步骤。通过具体代码展示了如何利用递归实现快速排序,并提供了完整的C++实现示例。
272

被折叠的 条评论
为什么被折叠?



