堆排序

Posted zhangchiblog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了堆排序相关的知识,希望对你有一定的参考价值。

堆排序

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 (这篇文章相当清晰)

以上是关于堆排序的主要内容,如果未能解决你的问题,请参考以下文章

选择排序(简单选择排序堆排序的算法思想及代码实现)

排序--08---堆排序

python代码实现堆排序

算法-java代码实现堆排序

一文带你了解堆排序

堆排序