一、直接选择排序
每一次从无序区间选出最大(或最小)的一个元素,存放在无序区间的最后(或最前),直到全部待排序的数据全部排完 。
代码实现:
public static void selectSort(int[] array){
for (int i = 0;i < array.length;i++){
for (int j = i + 1;j < array.length;j++){
if (array[j] < array[i]){
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
}
二、堆排序
基本原理也是选择排序,只是不在使用遍历的方式查找无序区间的最大的数,而是通过堆来选择无序区间的最大的数。
注意: 排升序要建大堆;排降序要建小堆。
代码实现:
public static void heapSort(int[] array){
for (int i = (array.length - 1 - 1) / 2;i >= 0;i--){
adjustDown(array,i,array.length);
}//建堆
int len = array.length - 1;
while (len > 0){
int temp = array[0];
array[0] = array[len];
array[len] = temp;
adjustDown(array,0,len);
len--;
}//排序
}
public static void adjustDown(int[] array,int parent,int len){
int child = parent * 2 + 1;
while (child < len){
if (child + 1 < len && array[child] < array[child + 1]){
child++;
}
if (array[child] > array[parent]){
int temp = array[child];
array[child] = array[parent];
array[parent] = temp;
parent = child;
child = parent * 2 + 1;
}else {
break;
}
}
}