1.首先定义一个基准值:tmp = arr[i],且让j--;
当arr[j] > tmp;时 j 不动,开始i++;
当arr[i] >tmp;时 交换arr[i]和arr[j];
当i,j相遇时,交换tmp 与 arr[i]
此时相遇点左边都小于基准值,右边的都大于基准值,递归操作就行。
#include<stdio.h>
#include<assert.h>
void swap(int* a,int* b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
void quicksort(int*arr,int left ,int right)
{
if(right - left <= 1)
{
return;
}
int tmp = arr[left];
int l = left;
int r = right-1;
while(l != r)
{
while(arr[r] > tmp && l < r)
{
--r;
}
while(arr[l] < tmp && l < r)
{
++l;
}
if( l < r )
{
swap(&arr[l],&arr[r]);
}
}
int index = l;
swap(&arr[l],&tmp);
quicksort(arr,left,index);
quicksort(arr,index+1,right);
}
int main()
{
int arr[] = { 7,2,1,5,4,18,9,3,6 };
size_t size = sizeof(arr)/sizeof(arr[0]);
int left = 0;
int right = size;
quicksort(arr,left,right);
size_t i = 0;
for(;i<size;++i)
{
printf("%d ",arr[i]);
}
printf("\n");
return 0;
}