运行结果
运行代码
#include<stdio.h>
//交换两个数
void change(int *a,int*b)
{
*a^=*b;
*b^=*a;
*a^=*b;
}
//快速排序
int quick_sort(int *arr,int len)
{
//数组长度过小
if(len<=1) return 0;
//选择一个基准 arr[0]
//定义两个游标分别再近端和远端
int i=0,j=len-1;
while(i<j)
{//先移动远端
while(*arr<=arr[j]&&i<j) j--;
while(*arr>=arr[i] && i<j) i++;
if(i<j) change(arr+i,arr+j);
}
if(i!=0) change(arr,arr+i);
//i分割数组为两个部分
quick_sort(arr,i);//前半部分
quick_sort(arr+i+1,len-i-1);//后半部分
return 0;
}
int show(int *arr,int len)
{
while(len--) printf("%d ",*arr++);
printf("\n");
}
int main()
{
int arr[]={0,68,90,77,18,25,66,23,51,99};
show(arr,sizeof(arr)/sizeof(int));
quick_sort(arr,sizeof(arr)/sizeof(int));
show(arr,sizeof(arr)/sizeof(int));
return 0;
}