堆排序在C#中的实现
来源:互联网 发布:java switch case用法 编辑:程序博客网 时间:2024/05/19 17:49
堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值,即A[PARENT[i]] >= A[i]。在数组的非降序排序中,需要使用的就是大根堆,因为根据大根堆的要求可知,最大的值一定在堆顶。
由此可以知道在完全二叉树中满足这样的条件:1、父节点:(k-1)/2取整(k为子节点,数组中下标从0开始)2、左子节点:2*k+1右子节点:2*k+2
下面是c#实现堆排序的完整方法:
class Program { static void Main(string[] args) { int[] nums = new int[] { 10, 6, 9, 11, 13, 8, 8,1,7,9,13,25,9,1,3,14}; Adjust(nums); Console.ReadKey(); } // public static void Heap(int[] nums) { //将最大的值推到堆顶 //x根据最后一个子节点的位置计算出父节点 int x = Convert.ToInt32(Math.Floor(Convert.ToDouble((nums.Length - 2) / 2))); for (int i = x; i >= 0; i--) { //如果子元素只存在左子元素是 让右子元素等于左子元素 while (nums[i] < nums[i * 2 + 1] || nums[i] < nums[(i * 2 + 2) > (nums.Length - 1) ? (i * 2 + 1) : i * 2 + 2]) { if (nums[i * 2 + 1] >= nums[(i * 2 + 2) > (nums.Length - 1) ? (i * 2 + 1) : i * 2 + 2]) { int index = nums[i]; nums[i] = nums[i * 2 + 1]; nums[i * 2 + 1] = index; } else { int index = nums[i]; nums[i] = nums[i * 2 + 2]; nums[i * 2 + 2] = index; } } } //输出堆顶最大的元素 int max = nums[0]; nums[0] = nums[nums.Length - 1]; Console.Write("{0}\t", max); //将数组中的最后一个元素删除 int[] num = new int[nums.Length - 1]; for (int j = 0; j < nums.Length - 1; j++) { num[j] = nums[j]; } Adjust(num); } public static void Adjust(int[] nums) { if (nums.Length > 1) { Heap(nums); } else { //当数组中只存在最后一个元素时,完成排序 //foreach (var i in nums) //{ // Console.Write("{0}\t", i); //} Console.Write("{0}\t", nums[0]); Console.ReadKey(); } } }
下面是执行结果:
阅读全文
0 0
- 堆排序在C#中的实现
- 堆排序算法在Java中的实现
- 堆排序C#实现
- C#实现堆排序
- 堆排序算法(C#实现)
- 堆排序——C#实现
- 【排序】堆排序实现
- 数据结构:插入排序/冒泡排序/快速排序/归并排序/堆排序 C#语言实现
- 堆排序 C#
- C#堆排序
- C# 堆排序
- C# 实现常用的算法-- 堆排序(转)
- 用堆实现堆排序
- Python实现 [堆] [堆排序]
- 最大堆实现堆排序
- 堆以及堆排序实现
- 堆实现 及 堆排序
- 最大堆实现堆排序
- renderer.material 方法过时
- 二叉树前序,中序,后序
- 启程篇
- 图像标注工具labelImg安装教程 Ubuntu16.04和win7
- 文章标题
- 堆排序在C#中的实现
- MySQL 非root用户创建database
- 排座位(百度2017秋招真题)
- 文章标题
- 循环赛日程表
- Redis_lesson5 Redis String 相关的操作指令
- [剑指offer]python从上到下打印二叉树【面试题9.15】
- Java基础知识——面向对象、数组、常用类
- VIEW