堆排序--C语言实现
2015-05-22 16:11
197 查看
#include<stdio.h> //arr是待调整的堆数组,length是数组的长度 void HeapAdjust(int arr[], const int length) { for (int j = length - 1; j > 0; --j) { int parent = j / 2; int child = j; //得到子结点中较大的结点 if (j < length - 1 && arr[j] < arr[j + 1]) { ++child; } //如果较大的子结点大于父结点那么把较大的子结点往上移动,替换它的父结点 if (arr[child] > arr[parent]) { int tmp = arr[child]; arr[child] = arr[parent]; arr[parent] = tmp; } } } void HeapSort(int arr[], const int length) { for (int j = length; j > 0; --j) { //不断缩小调整heap的范围,每一次调整完毕保证第一个元素是当前序列的最大值 HeapAdjust(arr, j); //把第一个元素和当前的最后一个元素交换, //保证当前的最后一个位置的元素都是在现在的这个序列之中最大的 int tmp = arr[0]; arr[0] = arr[j - 1]; arr[j - 1] = tmp; } } int main() { int arr[] = {5, 6, 1, 4, 9, 2, 7, 3, 8, 0 }; int n = sizeof(arr) / sizeof(arr[0]); HeapSort(arr, n); for (int j = 0; j < n; ++j) { printf("%d ", arr[j]); } printf("\n"); return 0; }
相关文章推荐
- 堆排序的C语言实现
- 堆排序(C语言实现)迭代
- 数据结构之---C语言实现堆排序
- 程序员面试题--堆排序的C语言实现
- 算法导论(Introduction to Algorithms)之堆排序(C语言实现)
- 排序系列之(2)堆排序及C语言实现
- 排序算法的C语言实现-堆排序
- 堆排序(C语言实现)
- 算法导论之插入排序,选择排序,归并排序,冒泡排序,希尔排序,堆排序,快速排序的c语言实现
- 堆排序 HeapSort C语言实现 附严蔚敏数据结构P282 代码错误
- C语言实现 排序源程序(包括直接插入、希尔、冒泡、快速、简单选择、堆排序)
- 堆排序(非递归版)-- c语言实现
- 数据结构排序算法之堆排序(c语言实现)
- 堆排序的C语言实现
- 堆排序-C语言实现
- C语言实现 排序源程序(包括直接插入、希尔、冒泡、快速、简单选择、堆排序)
- C语言实现堆排序的简单实例
- C语言对堆排序一个算法思路和实现代码
- 图解排序算法及C语言实现之 ------ 堆排序:Heap Sort
- C语言实现基本排序算法----排序(直接插入排序,SHELL排序,冒泡排序,快速排序,简单选择排序,堆排序)