您的位置:首页 > 编程语言 > Java开发

堆排序 java语言

2015-03-16 13:59 239 查看
<pre name="code" class="java">public class HeapSort {
public static void main(String[] args) {
new HeapSort().Start();
}

private void Start() {
/*定义数组*/
int[] array = {4,1,3,2,16,9,10,14,8,7};

//建立数组最大堆
BuildMaxHeap(array);
printArray("最大堆数组:",array);

for(int i=array.length-1;i>=1;i--) {
Exchange(array,0,i);
MaxHeapify(array,i,0);
}
printArray("排序后数组:",array);
}

private void printArray(String s,int[] array) {
System.out.println(s);
for(int i:array) {
System.out.print(i + " ");
}
System.out.println();
}

private void BuildMaxHeap(int[] array) {
if (array == null || array.length <= 1) {
return;
}
for(int i=array.length/2;i>=0;i--) {
MaxHeapify(array,array.length,i);
}
}

private void MaxHeapify(int[] array,int heapsize, int i) {
int largest=0;
int l = Left(i);
int r = Right(i);

if(l < heapsize && array[l] > array[i]) {
largest = l;
} else {
largest = i;
}

if(r < heapsize && array[r] > array[largest]) {
largest = r;
}

if(largest != i) {
Exchange(array,i,largest);
MaxHeapify(array,heapsize,largest);
}
}

//考虑下这个函数的写法
private void Exchange(int[] array, int i, int j) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}

//注意
private int Right(int i) {
return (2*i+2);
}

private int Left(int i) {
return (2*i+1);
}

}

运行后结果为:

最大堆数组:
16 14 10 8 7 9 3 2 4 1
排序后数组:
1 2 3 4 7 8 9 10 14 16


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: