堆排序
2017-10-22 15:03
253 查看
堆排序:
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; } } } }
相关文章推荐
- 算法--堆排序
- Python 面试题 - 堆排序 & 演算过程
- 排序算法-堆排序
- 为什么从5000个数中找出10个最大的堆排序最快?
- 算法设计与分析基础-6.4、堆和堆排序
- 哈夫曼树结合堆排序 POJ(3253)
- 算法学习笔记----第二部分:排序和顺序统计量----第6章、堆排序
- 算法导论之插入排序,选择排序,归并排序,冒泡排序,希尔排序,堆排序,快速排序的c语言实现
- 堆排序 一个综合了插入排序和二路归并特点的排序算法(未测试)
- Heap-堆排序
- [字符串hash][堆排序][AC自动机][usaco3.1.5]Contact
- 堆排序
- 算法导论堆排序Java实现
- C++数据结构--堆排序
- C/C++排序之五(堆排序)
- 堆排序
- 图灵标准版堆排序
- 堆排序详解以及java实现
- 堆排序
- 堆排序