关于快速排序,你首先要弄清楚:
1.它是什么类型的?也就是说,是比较,还是选择,还是?
2.为什么叫快?快在哪里?
这里这个排序,不是那种最为简洁的,但是,前面说过了,算法思想一样,但是具体的实现可以千差万别,确实不够干净,但是,你要能搞清楚里面的所有细节,当你面对那些简洁的时候,就显得更容易了,先上代码:
#include<iostream>
using namespace std;
template <class T>
void qck(T p[],int n){
int m,i;
T *s;
i=split(p,n);
qck(p,i);
s=p+(i+1);
m=n-(i+1);
qck(s,m);
return;
}
template <class T>
static int split(T p[],int n){
int i,j,k,l;
T t;
i=0;
j=n-1;
k=(i+j)/2;
if((p[i]>=p[j])&&(p[j]>=p[k])) l=j;
else if((p[i]>=p[k])&&(p[k]>=p[j])) l=k;
else l=i;
t=p[l];
p[l]=p[i];
while(i!=j)
{
while((i<j)&&(p[j]>=t))
j=j-1;
if(i<j)
{
p[i]=p[j];i=i+1;
while((i<j)&&(p[i]<=t))
i=i+1;
if(i<j)
{
p[j]=p[i];j=j-1;
}
}
}
p[i]=t;
return i;
}
具体的用例,就是上面的那个冒泡排序,只要调用函数改为qck(p,50);就可以了
关于快速排序,它是典型的递归算法,1个待排序列,分成两个,每个继续再分两个,直到,整个序列,只剩下单一元素,自然就排行序列了,这些就是,算法思想。