void quicksort(int *arr,int left,int right){ if(left>=right) return; int key=arr[left]; int i = left, j = right; while(i<j){ while(arr[j]>=key&&j>i){ j--; } arr[i]=arr[j]; while(arr[i]<=key&&i<j){ i++; } arr[j]=arr[i]; } arr[i]=key; quicksort(arr,left,i-1);//递归 quicksort(arr,i+1,right); }
首先选取第一个数为基准值,通过指针的移动和值的交换,使得在基准值左边的是小与基准值的,右边的数大于基准值,最后将基准值放到中间,。按照这个思路,进行递归,不断改变基准值和上限(或者下限),直到排序完成。