/**
* Created by upupgogogo on 2018/7/14.下午2:11
*/
public class HeapSort {
private int tree[];
private int size;
public void heapSort(int[] nums){
tree = new int[nums.length];
size = tree.length;
for (int i = 0; i < nums.length; i ++)
tree[i] = nums[i];
for (int i = (tree.length - 2) / 2; i >= 0 ; i-- )
siftDown(i);
for (int i = 0; i < nums.length; i ++){
nums[i] = tree[0];
int k = nums.length - i - 1;
tree[0] = tree[k];
size --;
siftDown(0);
}
}
private void siftDown(int k){
if (getLeftChild(k) >= size)
return;
int j = 0;
if (getRightChild(k) < size)
j = tree[getLeftChild(k)] > tree[getRightChild(k)] ? getLeftChild(k) : getRightChild(k);
else
j = getLeftChild(k);
if (tree[k] < tree[j]){
swap(k,j);
}
k = j;
siftDown(k);
}
private int getLeftChild(int index){
if (index < 0)
throw new IllegalArgumentException("index is illegal");
return index * 2 + 1;
}
private int getRightChild(int index){
if (index < 0)
throw new IllegalArgumentException("index is illegal");
return index * 2 + 2;
}
private void swap(int i, int j){
if (i < 0 | j < 0 | i >= size | j >= size)
throw new IllegalArgumentException("index is illegal");
int temp = tree[i];
tree[i] = tree[j];
tree[j] = temp;
}
1.堆结构堆结构2.堆排序O(nlogn)/** * Created by upupgogogo on 2018/7/14.下午2:11 */public class HeapSort { private int tree[]; private int size; public void heapSort(int[] nums){ tree =...