• C#算法基础之堆排序


      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Text;
      5 using System.Threading.Tasks;
      6 
      7 namespace ConsolePractice
      8 {
      9     public class Node
     10     {
     11         public int data;
     12         public Node(int key)
     13         {
     14             data = key;
     15         }
     16     }
     17 
     18     class Heap
     19     {
     20         Node[] heapArray = null;
     21         private int maxSize = 0;
     22         private int currSize = 0;
     23         public Heap(int maxSize)
     24         {
     25             this.maxSize = maxSize;
     26             heapArray = new Node[maxSize];
     27         }
     28 
     29         public bool InsertAt(int pos, Node nd)
     30         {
     31             heapArray[pos] = nd;
     32             return true;
     33         }
     34 
     35         public void ShowArray()
     36         {
     37             for (int i = 0; i < maxSize; i++)
     38             {
     39                 if (heapArray[i] != null)
     40                     Console.Write(heapArray[i].data + " ");
     41             }
     42             Console.WriteLine();
     43         }
     44 
     45         public void ShiftUp(int index)
     46         {
     47             int parent = (index - 1) / 2;
     48             Node bottom = heapArray[index];
     49             while ((index > 0) && (heapArray[parent].data < bottom.data))
     50             {
     51                 heapArray[index] = heapArray[parent];
     52                 index = parent;
     53                 parent = (parent - 1) / 2;
     54             }
     55             heapArray[index] = bottom;
     56         }
     57 
     58         public bool Insert(int key)
     59         {
     60             if (currSize == maxSize)
     61                 return false;
     62             heapArray[currSize] = new Node(key);
     63             currSize++;
     64             return true;
     65         }
     66 
     67         public Node Remove()
     68         {
     69             Node root = heapArray[0];
     70             currSize--;
     71             heapArray[0] = heapArray[currSize];
     72             ShiftDown(0);
     73             return root;
     74         }
     75 
     76         public void ShiftDown(int index)
     77         {
     78             int largerChild;
     79             Node top = heapArray[index];
     80             while (index < (int)(currSize / 2))
     81             {
     82                 int leftChild = 2 * index + 1;
     83                 int rightChild = leftChild + 1;
     84                 if ((rightChild < currSize) && heapArray[leftChild].data < heapArray[rightChild].data)
     85                     largerChild = rightChild;
     86                 else
     87                     largerChild = leftChild;
     88                 if (top.data >= heapArray[largerChild].data)
     89                     break;
     90                 heapArray[index] = heapArray[largerChild];
     91                 index = largerChild;
     92             }
     93             heapArray[index] = top;
     94         }
     95     }
     96 
     97     class C_shape
     98     {
     99         static void Main()
    100         {
    101             const int SIZE = 9;
    102             Heap aHeap = new Heap(SIZE);
    103             Random RandomClass = new Random();
    104             for (int i = 0; i < SIZE; i++)
    105             {
    106                 int rn = RandomClass.Next(1, 100);
    107                 aHeap.Insert(rn);
    108             }
    109             
    110             Console.WriteLine("Random:");
    111             aHeap.ShowArray();
    112             
    113             Console.WriteLine("Heap:");
    114             for (int i = (int)SIZE / 2 - 1; i >= 0; i--)
    115             {
    116                 aHeap.ShiftDown(i);
    117             }
    118             aHeap.ShowArray();
    119 
    120             Console.WriteLine("Sorted:");
    121             for (int i = SIZE - 1; i >= 0; i--)
    122             {
    123                 Node bigNode = aHeap.Remove();
    124                 aHeap.InsertAt(i, bigNode);
    125             }
    126             aHeap.ShowArray();
    127             Console.ReadKey();
    128         }
    129     }
    130 }
  • 相关阅读:
    poj 1222 EXTENDED LIGHTS OUT (高斯消元 )
    poj 2187 Beauty Contest (凸包: 最远点对,最长直径 , 旋转卡壳法)
    poj 1408 Fishnet (几何:线段相交 + 叉积 求面积 )
    poj 1228 Grandpa's Estate ( 凸包 )
    高斯消元 模版
    poj 1830 开关问题 (高斯消元 )
    poj 1113 Wall (凸包:周长)
    旋转卡壳算法
    poj 1681 Painter's Problem (高斯消元 )
    字符串相关处理
  • 原文地址:https://www.cnblogs.com/zt102545/p/3456778.html
Copyright © 2020-2023  润新知