C#堆排序

来源:互联网 发布:mac版ps字体怎么安装 编辑:程序博客网 时间:2024/05/19 18:47

笔试了不少校招题目 主要是互联网公司 题目主要为基础与海量数据 悲催的百度居然死在堆排序 唉 上班半年 基础算法很多都忘了 再写一下堆排序吧

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Caculater{    class HeapSortClass    {        public static void Main(string[] args)        {            int[] array = new int[100];            Random rdm = new Random();            for (int i = 0; i < array.Length; i++)            {                array[i] = rdm.Next(1000);            }            foreach (var i in array)            {                Console.WriteLine(i);            }            Console.ReadLine();            HeapSort(array);            foreach (var i in array)            {                Console.WriteLine(i);            }            Console.ReadLine();        }        private static void HeapSort(int[] array)        {            Build(array);            int k = 1;            foreach (var i in array)            {                Console.WriteLine(k++.ToString()+" "+i.ToString());            }            Console.ReadLine();            for (int i = array.Length; i >1 ; i--)            {                int temp = array[i-1];                array[i-1] = array[0];                array[0] = temp;                Max_Heapify(array, 1, i - 1);            }        }        private static void Build(int[] array)        {            for (int i = array.Length / 2; i >= 1; i--)            {                Max_Heapify(array, i ,array.Length);            }        }        private static void Max_Heapify(int[] array, int index,int length)        {            //length为堆的长度            int leftChild = index * 2;            int rightChild = leftChild + 1;            int largest = index;            if (leftChild <= length &&                array[leftChild-1] > array[largest-1])            {                largest = leftChild;            }            if (rightChild <= length &&                array[rightChild-1] > array[largest-1])            {                largest = rightChild;            }            if (largest != index)            {                int temp = array[index-1];                array[index-1] = array[largest-1];                array[largest-1] = temp;                Max_Heapify(array, largest,length);            }        }    }}


原创粉丝点击