快速排序:
#include<stdio.h>
void quicksort(int * arr, int left,int right);
void swap(int *a,int *b);
int main()
{
int arr[10]={2,6,3,9,5,2,0,23,12,1};
int length=sizeof(arr)/sizeof(arr[0]);
quicksort(arr,0,length-1);
for(int i=0;i<length;i++)
printf("%d ",arr[i]);
}
void quicksort(int * arr, int left,int right)
{
int i=left,j=right;
int temp=arr[left];
if(left>right)
return;
while(i<j)
{
while(arr[j]>=temp&&i<j)
j--;
while(arr[i]<=temp&&i<j)
i++;
if(i<j)
swap(&arr[i],&arr[j]);
}
arr[left]=arr[i];
arr[i]=temp;
quicksort(arr,left,i-1);
quicksort(arr,i+1,right);
return;
}
void swap(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
口诀:快排左i右j,i<j;
参考左一右先行;
右大j--左小i++;
左大于右相交换;
i=j退出来;
i指的值与参考换;
值左值右重排序。