1.挑选一个基准值
2.小于基准值的数放在大于基准值的数的左边
3.将基准值放入中间,即两种数分界的地方,根据挑选的基准值决定如何插入。
4.此时,基准值左边的区间小于等于基准值,基准值小于等于右边的区间,这三段有序,但内部无序,所以,将基准值左右两端继续进行快速排序,直到区间长度为1。是一个递归的过程。
void quick_sort(int arr[],int left,int right)
{
if(left>=right){
return ;
}
int i,j,temp;
i=left;
j=right;
temp=arr[left];//排序用的基准值,可自选
//比基准值大的放在右边,小的放在左边。
//可自选方法进行实现,最后结果要求比基准值小的在左边,比基准值大的在右边。
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]);
}
}
//i左边的值都小于等于基准值,右边都大于基准值
//进行过交换的地方一定满足,所以循环终止情况只有i和j两者相遇
//且在这种方法中,终止的位置一定是满足小于等于,不一定满足大于,因为是先从右往左进行查找
swap(arr[left],a[i]);
//基准值左边小于等于基准值,右边大于等于基准值,继续将左右区间进行快排。
quick_sort(arr,left,i-1);
quick_sort(arr,i+1,right);
}