您的位置:首页 > 其它

堆排序----排序算法

2018-03-08 20:52 148 查看
对于一个int数组,请编写一个堆排序算法,对数组元素排序。给定一个int数组A及数组的大小n,请返回排序后的数组。测试样例: 
[1,2,3,5,2,3],6 
[1,2,2,3,3,5] 
思路:首先以整个数组建一个大根堆,然后将根与最后一个结点交换,最后一个即有序,接着大根堆的大小-1,重新建立大根堆,重复上述过程 直至堆大小为1…..
import java.util.*;

public class HeapSort {
public int[] heapSort(int[] A, int n) {
// write code here
if(A==null||n<2){
return A;
}
buildHeap(A);   //建堆
sort(A);     //排序
return A;
}
public void buildHeap(int[] A){
for(int i=A.length/2-1;i>=0;i--){
buildMaxHeap(A,i,A.length-1);
}
}
public void sort(int[] A){
for(int i=A.length-1;i>=0;i--){
change(A,0,i);
buildMaxHeap(A,0,i-1);
}
}
public void buildMaxHeap(int[] A,int i,int end){
int left = 2*i+1;
int right = 2*i+2;
int tem;
if(left<=end&&A[left]>A[i]){
tem = left;
}else
tem = i;
if(right<=end&&A[right]>A[tem]){
tem = right;
}
if(tem != i){
change(A,i,tem);
buildMaxHeap(A,tem,end);
}
}
public void change(int[] A,int a,int b){
if(a!=b){
int tem1= A[a];
A[a] = A[b];
A[b] = tem1;
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47

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