快速排序
快速排序的平均时间复杂度:O(nlogn),高效,最优情况是:划分的两部分大小相等时 思路:选择最左边为基准值,将数组划分为两部分,这两部分再递归处理
public static void partition(int l,int r,int[]arr){ //int arr[] = {}; int t=0; int temp= 0; int left = l; int right = r; if(left>right){ return; } //设置左边为基准值,并且存放到temp里,此时最左边的空间是空的 temp = arr[l]; while(left!=right){ //下面操作在left=right时停止 //从右边开始判断,寻找比基准值小的数,则停止运动 while(arr[right]>=temp&&left<right){ right--; } //从左边开始判断,寻找比基准值大的数,停止运动 while(arr[left]<=temp&&left<right){ left++; } //当左右停止运动,交换找到的两个值 if(left<right){ t=arr[left]; arr[left]=arr[right]; arr[right]=t; } } //最终将基准数归位 arr[l]=arr[left]; arr[left] = temp; partition(l,left-1,arr); partition(left+1,r,arr); }