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();
            }
        }
    }

  • 相关阅读:
    no space left on device
    功能测试用例
    数据库命令
    移动APP测试用例设计实践经验(转载)
    15个常用sql命令
    将Windows文件夹挂载到Linux上
    英语学习方法
    三种特质 做领导
    扬州之行 第一天
    list、dict、str虽然是Iterable,却不是Iterator
  • 原文地址:https://www.cnblogs.com/kingwangzhen/p/1516741.html
Copyright © 2011-2022 走看看