zoukankan      html  css  js  c++  java
  • 算法和数据结构排序堆排序

     大根堆的调整:
    // array是待调整的堆数组,i是待调整的数组元素的位置,nlength是数组的长度
    void HeapAdjust(int array[], int i, int nLength)
    {
    	int nTemp=array[i];
    	for (int j = 2 * i + 1 ; j < nLength; j = j * 2 + 1)
    	{
    		// 沿key较大的孩子结点向下筛选
    		if (j < n-1 && (array[j+1] > array[j]))
    			++j;//j为key较大的记录的下标
    		if (nTemp < array[j])
    		{
    			array[i] = array[j];
    			i=j;//应插入位置
    		}
    		else       
    		{
    			break;  // 否则退出循环
    		}
    	}
    	// 最后把需要调整的元素值放到合适的位置
    	array[i] = nTemp;
    }
    
     堆排序算法
    void HeapSort(int array[], int length)
    {
        // 调整序列的前半部分元素,调整完之后第一个元素是序列的最大的元素
        for (int i = length / 2 - 1; i >= 0; --i)
        {
            HeapAdjust(array, i, length);
        }
        // 从最后一个元素开始对序列进行调整,不断的缩小调整的范围直到第一个元素
        for (int i = length - 1; i > 0; --i)
        {
            // 把第一个元素和当前的最后一个元素交换,
            // 保证当前的最后一个位置的元素都是在现在的这个序列之中最大的
            Swap(&array[0], &array[i]);
            // 不断缩小调整heap的范围,每一次调整完毕保证第一个元素是当前序列的最大值
            HeapAdjust(array, 0, i);
        }
    }
    
  • 相关阅读:
    IO复习
    递归
    转换流
    编码与解码
    打印流(printStream)
    Properties
    【转】将Visual Studio武装到底
    【转】VS2008中的自定义格式化代码
    C++开发工具的常用插件
    抽烟的注意事项
  • 原文地址:https://www.cnblogs.com/tgkx1054/p/2596493.html
Copyright © 2011-2022 走看看