码迷,mamicode.com
首页 > 编程语言 > 详细

堆排序

时间:2016-05-16 19:31:12      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:

对于一个int数组,请编写一个堆排序算法,对数组元素排序。

给定一个int数组A及数组的大小n,请返回排序后的数组。

测试样例:
[1,2,3,5,2,3],6
[1,2,2,3,3,5]

代码:

class HeapSort {
public:
    void swap(int* A, int i, int j) {
        int tmp=A[i];
        A[i]=A[j];
        A[j]=tmp;
    }

    void sink(int* A, int k, int n) {
        while(k*2+1<=n){    		//k有子节点
            int j=k*2+1;   		 //j表示其子节点
            if(j<n && A[j+1]>A[j])    	//j指向左右孩子中大的
                j++;
            if(A[k]>A[j])
                break;
            swap(A,k,j);
            k=j;
        }
    }

    int* heapSort(int* A, int n) {
        n--;    //最后一个元素是A[n-1]
        for(int parent=(n-1)/2; parent>=0; parent--)	  //建大顶堆
            sink(A,parent,n);
        while(n>0){
            swap(A,0,n--);
            sink(A,0,n);
        }
        return A;
    }
};

 

堆排序

标签:

原文地址:http://www.cnblogs.com/claremore/p/5499067.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!