//定义宏来求数组长度
#define SIZE(a) sizeof(a)/sizeof(a[0])
//冒泡排序,两两相比,把大值往后移
void bubbleSort(int data[],size_t size){
int i,j;
for(i=0;i<size-1;i++){
int x=1;
for(j=0;j<size-1-i;j++){
if(data[j]>data[j+1]){
int tmp=data[j];
data[j]=data[j+1];
data[j+1]=tmp;
x=0;
}
}
//如果没有进行交换,则退出循环
if(x) break;}
}
void insertSort(int data[],size_t size){
int i,j;
for(i=1;i<size;i++){
int tmp=data[i];
for(j=i;j>0&&data[j-1]>tmp;j--){
data[j]=data[j-1];
}
if(j!=i)
data[j]=tmp;
}
}
//选择排序,按下标递增方式依次选出最小值存入
void selectSort(int data[],size_t size){
int i,j;
for(i=0;i<size;i++){
int min=i;
for(j=i+1;j<size;j++){
if(data[min]<data[j])
min=j;
}
if(min!=i){
int tmp=data[i];
data[i]=data[min] ;
data[min]=tmp;
}
}
}
//快速排序,取中间元素为基准进行分组,小的放左边,大的放右边,然后递归
void quickSort(int data[],size_t l,size_t r){
int p=(l+r)/2;
int pivot=data[p];
size_t i=l,j=r;
for(;i<j;){
while(i<p&&data[i]<pivot){
i++;
}
if(i<p){
data[p]=data[i];
p=i;
}
while(j>p&&data[j]>pivot){
j--;
}
if(p<j){
data[p]=data[j];
p=j;
}
}
data[p]=pivot;
if(p-l>1)
quickSort(data,l,p-1);
if(r-p>1)
quickSort(data,p+1,r);
}
int main(){
int a[]={111,23,4,5,2,56,6};
size_t size=SIZE(a);
//bubbleSort(a,size);
//insertSort(a,size);
//selectSort(a,size);
quickSort(a,0,size-1);
int i;
for(i=0;i<size;i++)
printf("%d ",a[i]);
printf("\n");
}