package code; /* * 912. Sort an Array * 题意:数组排序 * 难度:Medium * 分类: * 思路: * Tips:注意和lc215区别 * lc215 */ public class lc912 { public static void main(String[] args) { int[] arr = sortArray2(new int[]{5,2,3,1}); for(int i: arr){ System.out.println(i); } } // 快排 public int[] sortArray(int[] nums) { quickSort(nums, 0, nums.length-1); return nums; } public void quickSort(int[] nums, int left, int right){ if(left>=right) return; //注意返回 int l = left; int r = right; int pivot = nums[left]; while(left=pivot) right--; int temp = nums[right]; nums[right] = nums[left]; nums[left]=temp; //交换 while(left=0){ AdjustTree(nums, nums.length-1, pos); pos--; } //排序,每次找出最大的,从堆中去掉,调整堆 int cur = nums.length-1; while(cur>=0){ //交换位置 int temp = nums[0]; nums[0] = nums[cur]; nums[cur] = temp; cur--; AdjustTree(nums, cur, 0); } return nums; } public void AdjustTree(int[] nums, int len, int pos){ //调整堆 int pos_exchange = pos*2+1; while(pos_exchange<=len){ //left if(pos_exchange+1<=len&&nums[pos_exchange+1]>nums[pos_exchange]){ //比较左右节点,挑出来大的 pos_exchange += 1; } if(nums[pos_exchange]>nums[pos]){ //和父节点比较 int temp = nums[pos]; nums[pos] = nums[pos_exchange]; nums[pos_exchange] = temp; pos = pos_exchange; pos_exchange = pos*2+1; }else{ break; } } } }