堆排序----排序算法
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…..
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
[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
相关文章推荐
- 各种排序算法实现——基数排序、归并排序、插入排序、冒泡排序、选择排序、快速排序、堆排序、希尔排序
- 经典排序算法 - 堆排序Heap sort
- 排序算法之堆排序
- 排序算法:堆排序
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- golang实现常用排序算法 --- 快速排序、堆排序等
- 排序算法:堆排序
- 排序算法:堆排序
- 排序算法思想——归并排序、堆排序、shell排序
- 【排序算法】堆排序的分析
- 排序算法之堆排序
- 排序算法——堆排序
- 排序算法复习(Java实现)(二): 归并排序,堆排序,桶式排序,基数排序
- [028]八大排序算法详解——堆排序
- 排序算法五——堆排序
- 排序算法-堆排序
- Java排序算法(三):堆排序
- 选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法
- 排序算法(3)-堆排序
- Java排序算法——堆排序