#include<stdio.h>
int kp1(int a[],int l,int h){
int p=a[l]; //使用p来记录枢轴的值
while(l<h){ //推出条件,头尾指针相等
while(l<h&&a[h]>p)h--; //从尾部开始找到第一个不符合规定的与头交换
a[l]=a[h];
while(l<h&&a[l]<p)l++; //从头开始找到第一个不符合的与尾交换
a[h]=a[l];
}
a[l]=p; //将枢轴赋值
return l; //返回枢轴位置
}
void kp2(int a[],int l,int h){
int b;
if(l<h){
b=kp1(a,l,h); //一分为二,b记录中间值
kp2(a,l,b-1); //对前半部分继续排
kp2(a,b+1,h); //对后半部分继续排
}
}
int main(){
int a[6]={6,5,4,3,2,1};
kp2(a,0,5);
for(int i=0;i<6;i++){
printf("%d\t",a[i]);
}
return 0;
}
思想就是不断地找一个中心,然后交换,在冒泡排序上有所改进,但并不稳定,不过加快了效率,一次交换多个元素。