堆排序

来源:互联网 发布:淘宝网男徒步凉鞋 编辑:程序博客网 时间:2024/05/29 10:33

堆排序:

class Program    {        static void Main(string[] args)        {            int[] nums = { 1, 4, 8, 0, 3, 6, 9, 2 };            HeapSort(nums);            for (int i = 0; i < nums.Length; i++)            {                Console.Write(nums[i] + " ");            }            Console.ReadKey();        }        static void HeapSort(int[] nums)        {            //  构造成大顶堆            for (int i = nums.Length / 2; i >= 1; i--)            {                AdjustArray(nums, i, nums.Length);            }            //  进行排序            for (int i = nums.Length; i > 1; i--)            {                int temp1 = nums[0];                nums[0] = nums[i - 1];                nums[i - 1] = temp1;                AdjustArray(nums, 1, i - 1);            }        }        static void AdjustArray(int[] nums, int NumberToAdjust, int maxNumber)        {            int maxNumberIndex = NumberToAdjust;            int tempI = NumberToAdjust;            while (true)            {                int leftNumberIndex = 2 * tempI;                int rightNumberIndex = 2 * tempI + 1;                if (leftNumberIndex <= maxNumber && nums[leftNumberIndex - 1] > nums[maxNumberIndex - 1])                {                    maxNumberIndex = leftNumberIndex;                }                if (rightNumberIndex <= maxNumber && nums[rightNumberIndex - 1] > nums[maxNumberIndex - 1])                {                    maxNumberIndex = rightNumberIndex;                }                if (maxNumberIndex != tempI)                {                    int temp = nums[maxNumberIndex - 1];                    nums[maxNumberIndex - 1] = nums[tempI - 1];                    nums[tempI - 1] = temp;                    tempI = maxNumberIndex;                }                else                {                    break;                }            }        }    }


原创粉丝点击