代码:
//快速排序
void swap(int *t,int a,int b){
int temp;
temp=t[a];
t[a]=t[b];
t[b]=temp;
}
void Quick_sort(int *a,int s,int e){
int mid;
int first=s++;
int last=e;
if(first<e){
while(s<e){
while(a[s]<a[first]&&s<e){
s++;
}
if(s>=e) break;
while(a[e]>a[first]&&e>s){
e--;
}
if(s>=e) break;
swap(a,s,e);
s++;
e--;
}
if(a[s]<a[first]) {//是否,不要‘=’,该算法就稳定了??? 答:no,快速排序算法是不稳定的,除非增加另外的原始属性和另外处理
swap(a,first,s);
mid=s;
}
else if(a[s]>a[first]){
swap(a,first,s-1);
mid=s-1;
}
Quick_sort(a,first,mid);
Quick_sort(a,mid+1,last);
}
}
注意,扫描前后端(最内层的两个while语句)的判断条件中是否有‘=’号,可能使过程或结果有所区别。但a[s]<a[first,a[e]>a[first]时较好,因为这样在遇到有很多相同元素的数组时可以把数组划分得更加平均。