zoukankan      html  css  js  c++  java
  • 经典排序算法——堆排序

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

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

    測试例子:
    [1,2,3,5,2,3],6

    [1,2,2,3,3,5]


    class HeapSort {
    public:
    	int* heapSort(int* A, int n) {
            
    		BuildMaxHeap(A, n);//首先将数组A构建成大顶堆
            
    		for (int i = n - 1; i >= 1; i--)
    		{
                swap(A[0],A[i]);//将堆顶最大值与未排序的最后一个数交换
    			MaxHeapFix(A, 0, i-1);//将A[0,i-1]又一次调整为大顶堆
    		}
    		return A;
    	}
        
        //构建大顶堆
    	void BuildMaxHeap(int *A, int n)
    	{
    		for (int i = n / 2 - 1; i >= 0; i--)
    			MaxHeapFix(A, i, n-1);
    	}
        
        //又一次调整为大顶堆
    	void MaxHeapFix(int *A, int i, int n)
    	{
    		int key = A[i];
    		for(int j=2*i;j<n;j*=2)
    		{
    			if (j<n && A[j]<A[j+1])//找出左右子树中较大
    				++j;
    			if (key>=A[j])//根节点key与左右子树中较大值比較。若key较大,则直接跳出本次循环;若key较小,则进行交换
    				break;
    			A[i] = A[j];
    			i=j;
    		}
    		A[i] = key;
    	}
    };


  • 相关阅读:
    python操作MongoDB(API)
    jQuery插件—validation实现表单校验
    jquery实现下拉列表二级联动
    OSPF配置(H3C)
    OSPF区域
    OSPF路由协议
    直连路由和静态路由
    IP路由原理
    RIP路由协议
    deepin安装VMware workstation
  • 原文地址:https://www.cnblogs.com/slgkaifa/p/7136616.html
Copyright © 2011-2022 走看看