堆排序

Deadly 提交于 2019-12-20 09:58:47

堆排序,代码简化至32行
原理如下gif图,该图为搜索图,非原创:
在这里插入图片描述
源代码:

import java.util.Arrays;
public class HeapSort {
	public static void main(String args[]) {
		int arr[]= {8,6,2,0,7,9,3,4,1,5,11};
		System.out.println("source data: "+Arrays.toString(arr));
		sort(arr,arr.length-1);
		System.out.println("heap sort data: "+Arrays.toString(arr));
	}
	private static void sort(int arr[],int len) {
		for(int i=(len-1)/2;i>=0;i--)
			adjustHeap(arr,i,len);
		for(int i=len;i>0;i--) {
			swap(arr,0,i);
			adjustHeap(arr,0,i-1);
		}
	}
	private static void adjustHeap(int arr[],int i,int len) {
		int max=i*2+1;
		if(max>len) return ;
		if(max+1<=len&&arr[max]<arr[max+1])
			max++;
		if(arr[max]>arr[i]) {
			swap(arr,i,max);
			adjustHeap(arr,max,len);
		}
	}
	private static void swap(int arr[],int i,int j) {
		int temp=arr[i];
		arr[i]=arr[j];
		arr[j]=temp;
	}
}

运行结果:
在这里插入图片描述

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!