堆排序
堆排序
public static void heapSort(int[] arr) { //构建最大堆 heapInsert(arr); int size = arr.length; while (size > 1) { //调整堆顶和堆底的数值 swap(arr, 0, size - 1); size--; //构造最大堆 heapify(arr, 0, size); } } private static void heapify(int[] arr, int beigin, int end) { int[] arr1 = Arrays.copyOfRange(arr, beigin, end); heapInsert(arr1); int j = 0; for(int i = beigin; i < end; i++){ arr[i] = arr1[j]; j++; } } private static void swap(int[] arr, int a, int b) { int temp = arr[a]; arr[a] = arr[b]; arr[b] = temp; } private static void heapInsert(int[] arr) { int end = arr.length - 1; while (end > 0){ int father = (end - 1) / 2; if(arr[father] < arr[end]){ swap(arr, end, father); } end--; } } public static void main(String[] args){ int[] arr = {3, 6, 8, 5, 7,10,11,21,23,55,23,66,1,534}; heapSort(arr); System.out.println(arr); }
1、构建最大堆
2、从数组的队尾往前,先将第一个和最后一个交换位置
3、重新构建最大堆
4、依次类推。。。
---------------------
参考文章:
https://blog.csdn.net/u010452388/article/details/81283998 (这篇文章相当清晰)