• 堆排序算法的实习(C++)


    View Code
     1 //HeapSort.cpp : 定义控制台应用程序的入口点。
     2 //
     3 
     4 #include "stdafx.h"
     5 #include <iostream>
     6 
     7 using namespace std;
     8 
     9 //此函数为大顶堆调整函数
    10 void HeapAdjust(int* arr,int start, int end)
    11 {
    12     int temp;//用作交换的存储单元,此算法的空间复杂度为此。
    13     int j=0;//关键字较大的节点位置
    14     temp = arr[start];
    15     for(j = start*2 + 1; j <= end; j=(j*2+1))
    16     {
    17         if(j < end && arr[j] < arr[j+1])
    18         {
    19             ++j;
    20         }
    21         if(temp >= arr[j]) break;
    22         arr[start] = arr[j];
    23         start = j;
    24     }
    25     arr[start] = temp;
    26 }
    27 //堆排序函数
    28 void HeapSort(int *a,int len)
    29 {
    30     for(int i =len/2-1; i >= 0; --i )
    31     {
    32         HeapAdjust(a,i,len-1);
    33     }
    34     for(int j=len-1; j >= 0; --j)
    35     {
    36         int tmp = a[0];
    37         a[0] = a[j];
    38         a[j] = tmp;
    39         HeapAdjust(a,0,j-1);
    40     }
    41 }
    42 int _tmain(int argc, _TCHAR* argv[])
    43 {
    44     int a[20]={-1,23,5456,21,784,12,46,89,21213,687,32,-12,8,0,123,-34,2332,3333,5674,1111};
    45     HeapSort(a,20);
    46     for(int i=0; i < 20;++i)
    47     {
    48         cout<<a[i]<<"  ";
    49     }
    50     cout<<endl;
    51     return 0;
    52 }
    53 
    54  
    HeapSort.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include <iostream>
    
    using namespace std;
    
    //此函数为大顶堆调整函数
    void HeapAdjust(int* arr,int start, int end)
    {
        int temp;//用作交换的存储单元,此算法的空间复杂度为此。
        int j=0;//关键字较大的节点位置
        temp = arr[start];
        for(j = start*2 + 1; j <= end; j=(j*2+1))
        {
            if(j < end && arr[j] < arr[j+1])
            {
                ++j;
            }
            if(temp >= arr[j]) break;
            arr[start] = arr[j];
            start = j;
        }
        arr[start] = temp;
    }
    //堆排序函数
    void HeapSort(int *a,int len)
    {
        for(int i =len/2-1; i >= 0; --i )
        {
            HeapAdjust(a,i,len-1);
        }
        for(int j=len-1; j >= 0; --j)
        {
            int tmp = a[0];
            a[0] = a[j];
            a[j] = tmp;
            HeapAdjust(a,0,j-1);
        }
    }
    int _tmain(int argc, _TCHAR* argv[])
    {
        int a[20]={-1,23,5456,21,784,12,46,89,21213,687,32,-12,8,0,123,-34,2332,3333,5674,1111};
        HeapSort(a,20);
        for(int i=0; i < 20;++i)
        {
            cout<<a[i]<<"  ";
        }
        cout<<endl;
        return 0;
    }
    
     
    
  • 相关阅读:
    Java并发编程(1)-Java内存模型
    Java源码解读(一) 8种基本类型对应的封装类型
    怎样修改织梦网站的favicon图标
    友情链接:图片链接或文字链接
    FCKeditor 添加行距、字体功能 (转载)
    如何解决织梦DedeCMS后台模块管理列表不显示
    制作兼容各种版本浏览器的新闻图片焦点切换效果
    织梦添加站内搜索
    织梦友情链接正确的调用方法和技巧
    织梦后台添加友情链接的方法(flink标签)
  • 原文地址:https://www.cnblogs.com/TianMG/p/2680108.html
Copyright © 2020-2023  润新知