zoukankan      html  css  js  c++  java
  • C# 堆排序 完整代码

    using System;
    using System.Collections.Generic;
    using System.Text;

    namespace MaxHeapSort
    {
        class Program
        {
            private static int[] myArray;
            private static int arraySize;

            //交换数据
            static void Exchange(int i,int j)
            {
                int temp;
                temp = myArray[i];
                myArray[i] = myArray[j];
                myArray[j] = temp;
            }
            //利用向下遍历节点建立堆
            static void TraversingHeap(int vNode)
            {
                int wNode = 2*vNode + 1; //节点wNode是vNode的第一个子节点
                while(wNode<arraySize)
                {
                    //如果vNode 有第二个子节点,将wNode设置成vNode下面最大的子节点
                    if (wNode + 1 < arraySize)
                        if (myArray[wNode + 1] > myArray[wNode])
                            wNode++;
                    //如果vNode已经是最大,则返回
                    if(myArray[vNode]>myArray[wNode])
                        return;

                    //如果vNode不是,交换vNode和wNode值
                    Exchange(vNode,wNode);

                    //继续查找下一个节点
                    vNode = wNode;
                    wNode = 2*wNode + 1;
                }
            }
            //建立Heap
            static void Buildheap()
            {
                for(int vNode=arraySize/2-1;vNode>=0;vNode--)
                   TraversingHeap(vNode);
            }
            static void HeapSort()
            {
                Buildheap();
                while(arraySize>1)
                {
                    arraySize--;
                    Exchange(0,arraySize);
                   TraversingHeap(0);
                }
            }
            static void Main(string[] args)
            {
                int[] a = {42, 13, 24, 91, 23, 16, 05, 88};

                myArray = a;
                arraySize = a.Length;
                HeapSort();

                for(int i=0;i<a.Length;i++)
                    Console.Write(a[i]+" ");

                Console.Read();
            }
        }
    }

  • 相关阅读:
    C#.Net Winform 应用程序莫名其妙崩溃。
    不小心点击安装了搜狗手机助手,顿时有一种草搜狗全体人员的感觉。
    家乐福张江店班车时刻表
    为什么学习设计模式
    同一端口如何区分不同的Socket
    用命令行CMD .bat 相关操作 如: 创建快捷方式 复制文件等
    C++ 时间获取和时间测量
    get all ODBC drivers 驱动
    命令行 编译C#.NET项目
    如何打开.hlp文件指定的topic
  • 原文地址:https://www.cnblogs.com/kingwangzhen/p/1516741.html
Copyright © 2011-2022 走看看