这几天在复习数据结构,准备春招
复习选择排序的时候,学到了一个二元选择排序
代码如下:
class Solution {
public int[] sortArray(int[] nums) {
for(int i = 0; i < nums.length/2; i ++){
int min = i;
int max = i;
for(int j = i+1; j < nums.length-i; j ++){
if(nums[min] > nums[j]) min = j;
if(nums[max] < nums[j]) max = j;
}
//min等于i时,max不一定等于i,而max=min时,两者一定为i
//且后面的值都相等,此时结束排序
if(min == max) break;
int temp = nums[i];
nums[i] = nums[min];
nums[min] = temp;
if(max == i) max = min;
temp = nums[nums.length-i-1];
nums[nums.length-i-1] = nums[max];
nums[max] = temp;
}
return nums;
}
}
好处:
- 二元选择排序,每轮选择时记录最小值和最大值,可以把数组需要遍历的范围缩小一倍。
- 对于最大值元素比较多的数组,减少了运算量