public class 选择排序 {
public static void swap(int[] array, int i, int j){
int tmp = array[i];
array[i] = array[j];
array[j] = tmp;
}
public static void selectSort(int[] array){
for (int i = 0; i < array.length; i++) {
int minIndex = i;
for (int j = i+1; j < array.length; j++) {
if(array[minIndex] > array[j]){
minIndex = j;
}
}
if(minIndex != i){
int tmp = array[i];
array[i] = array[minIndex];
array[minIndex] = tmp;
}
}
}
public static void heapSort(int[] array){
createHeap(array);
for (int i = array.length-1; i > 0; i--) {
swap(array,0,i);
shiftDown(array,0,i);
}
}
public static void createHeap(int[] array){
for(int parent = (array.length-1-1)/2; parent >= 0; parent--){
shiftDown(array,parent,array.length);
}
}
public static void shiftDown(int[] array, int parent, int len){
int child = parent*2 + 1;
while (child < len){
if(child+1 < len && array[child+1] > array[child]){
child++;
}
if(array[parent] < array[child]){
swap(array,parent,child);
parent = child;
child = parent*2 + 1;
}else{
break;
}
}
}