堆排序
来源:互联网 发布:ubuntu uefi 引导修复 编辑:程序博客网 时间:2024/06/06 06:40
堆排序
初始化堆:将数列a[1…n]构造成最大堆。
交换数据:将a[1]和a[n]交换,使a[n]是a[1…n]中的最大值;然后将a[1…n-1]重新调整为最大堆。 接着,将a[1]和a[n-1]交换,使a[n-1]是a[1…n-1]中的最大值;然后将a[1…n-2]重新调整为最大值。 依次类推,直到整个数列都是有序的。
对排序主要是将最小(或者最大)先找到, 排到a[0], 再将a[0] 与 最后一位元素交换位置, 将size-1 , 再重复将最小的放在a[0] 与 最后交换位置
主要代码
//将最大的排在第一个void sort(int a[], int first, int last){ int m = first * 2 + 1; int tmp = a[first]; for (; m < last; first = m, m = m * 2 + 1) { if (m < last - 1 && a[m] < a[m + 1]) m++; if (a[m] > tmp) a[first] = a[m]; else break; } a[first] = tmp;}
//将最小的排在第一个void sort(int a[], int first, int last){ int m = first * 2 + 1; int tmp = a[first]; for (; m < last; first = m, m = m * 2 + 1) { if (m < last - 1 && a[m] > a[m + 1]) m++; if (a[m] < tmp) a[first] = a[m]; else break; } a[first] = tmp;}
最大与最小的排序区别就在代码的两个 > 和 <
源代码
#include <stdio.h>#include <stdlib.h>//将最大的排在第一个void sort(int a[], int first, int last){ int m = first * 2 + 1; int tmp = a[first]; for (; m < last; first = m, m = m * 2 + 1) { if (m < last - 1 && a[m] < a[m + 1]) m++; if (a[m] > tmp) a[first] = a[m]; else break; } a[first] = tmp;}//交换两个第一个与最后一个数void swap(int first, int size, int a[]){ int t = a[first]; a[first] = a[size]; a[size] = t;}void sort_1(int a[], int size){ int i; for (i = size / 2; i >= 0; i--) sort(a, i, size); for (i = size - 1; i > 0; i--) { //交换两个第一个与最后一个数, 然后数组大小 -1在重新排序; swap(0, i, a); sort(a, 0, i); }}int main(){ int a[] = { 0 , 3, 5 ,2 ,4, 9, 7 ,6 }; int size = sizeof(a) / sizeof(a[0]); sort_1(a, size); for (int i = 0; i < size; i++) printf("%d ", a[i]); system("pause"); return 0;}
阅读全文
0 0
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- redis java 2次封装
- Linux、vim常用基本命令
- 二分法小结
- unity3d通过Application.version返回的是unity版本号如图 ....text = Application.version
- 进程和线程
- 堆排序
- 配置LVS+keepalived高可用负载均衡服务器
- JavaScript数据结构(3):单向链表与双向链表
- iOS崩溃 捕获异常处理(二)
- HTTP请求的参数详解
- Ubuntu上搭建robotframework
- 城市列表
- Openlayers实现WFS服务及单击要素查询
- 单链表和双链表的实现