码迷,mamicode.com
首页 > 编程语言 > 详细

四、堆排序

时间:2015-07-15 18:54:24      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:

堆排序

堆排序是指利用堆积树这种数据结构所设计的一种排序算法,它是选择排序的一种。

可以利用数组的特点快速定位指定索引的元素。

以下代码是一个简单堆排序算法,功能是排序一个整数数组,用C#实现:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace HeapSort
{
    class Program
    {
        private static void HeapDown(int[] arr, int pos, int size)
        {
            int LChild = 2 * pos + 1;
            int RChild = 2 * pos + 2;

            int max = pos;
            if (pos < size / 2)
            {
                if (LChild < size && arr[LChild] > arr[max])
                {
                    max = LChild;
                }
                if (RChild < size && arr[RChild] > arr[max])
                {
                    max = RChild;
                }
                if (max != pos)
                {
                    int tmp = arr[pos];
                    arr[pos] = arr[max];
                    arr[max] = tmp;
                    HeapDown(arr, max, size);
                }
            }

        }
        private static void BuildHeap(int[] arr)
        {
            int size = arr.Length;
            for (int i = size / 2 - 1; i >= 0; i--)
            {
                HeapDown(arr, i, size);
            }
        }
        public static void HeapSort(int[] arr, int size)
        {
            BuildHeap(arr);
            for (int i = 0; i < arr.Length; i++)
            {
                int tmp = arr[0];
                arr[0] = arr[arr.Length - 1 - i];
                arr[arr.Length - 1 - i] = tmp;
                HeapDown(arr, 0, size - 1 - i);
            }

        }
        static void Main(string[] args)
        {
            int[] arr = new int[11] { 7, 4, 3, 2, 1, 11, 1, 6, 7, 12, 3 };
            //BuildHeap(arr);
            HeapSort(arr, 11);
            foreach (int i in arr)
            {
                Console.WriteLine(i);
            }
            Console.ReadKey();
        }
    }
}

 

四、堆排序

标签:

原文地址:http://www.cnblogs.com/holt/p/4648847.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!