数据结构:排序算法之堆排序和选择排序
1、堆排序
void HeapAdjust(int array[], int root, int size)
{int parent = root;int child = root*2 + 1;while(child < size){ //还剩三个数据时:1(0), 2(1), 3(2)左右孩子需要调整,此时:child+1 == childif(child+1 <= size && array[child] < array[child + 1]){child += 1;}if(array[parent] < array[child]){std::swap(array[parent], array[child]);parent = child;child = child*2 + 1;}elsebreak;}}void HeapSort(int array[], int size)
{for(int idx = (size-2)/2; idx >= 0; --idx){HeapAdjust(array, idx, size);}int index = size-1;while(index > 0){std::swap(array[0], array[index]);index--;HeapAdjust(array, 0, index);}
}
2、选择排序
int SelectMinKey(int a[], int n, int i)
{int k = i;for(int j=i+1 ;j< n; ++j) {if(a[k] > a[j]) k = j;}return k;
}/*** 选择排序**/
void selectSort(int a[], int n){int key, tmp;for(int i = 0; i< n; ++i) {key = SelectMinKey(a, n,i); //选择最小的元素if(key != i){tmp = a[i]; a[i] = a[key]; a[key] = tmp; //最小元素与第i位置元素互换}print(a, n , i);}
}
数据结构:排序算法之堆排序和选择排序相关推荐
- 【排序算法】图解简单选择排序(图解堪比Debug显示每次循环结果)
[排序算法]图解简单选择排序(图解堪比Debug分析每次循环结果) 写在前面: 本文主要介绍简单选择排序算法,通过图片一步步解释每一趟每一次的后移.代码通过C#实现,并输出每一次交换的情况和比较次数, ...
- 加标志量的选择排序算法c语言,置换选择排序算法详解(C语言实现)
上一节介绍了增加 k-路归并排序中的 k 值来提高外部排序效率的方法,而除此之外,还有另外一条路可走,即减少初始归并段的个数,也就是本章第一节中提到的减小 m 的值. m 的求值方法为:m=⌈n/l⌉ ...
- 【简单排序算法】:简单选择排序、直接插入排序和冒泡排序
[简单排序算法]:简单选择排序.直接插入排序和冒泡排序 简单选择排序: 原理:设所排序序列的记录个数为n.i取1,2,-,n-1,每次从所有n-i+1个记录(Ri,Ri+1,-,Rn)中找出最小的记录 ...
- C语言排序算法(一)——选择排序实现
C语言排序算法(一)--选择排序实现 编写程序,实现从键盘输入10个数,并用选择法从小到大排序. 简单选择排序的基本思想:第1趟,在待排序记录r[1]r[n]中选出最小的记录,将它与r[1]交换:第2 ...
- [ 数据结构 -- 手撕排序算法第四篇 ] 选择排序
手撕排序算法系列之第四篇:选择排序. 从本篇文章开始,我会介绍并分析常见的几种排序,大致包括直接插入排序,冒泡排序,希尔排序,选择排序,堆排序,快速排序,归并排序等. 大家可以点击此链接阅读其他排序算 ...
- 十大排序算法:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序
冒泡排序.选择排序.插入排序.希尔排序.归并排序.快速排序.堆排序.计数排序.桶排序.基数排序的动图与源代码. 目录 关于时间复杂度 冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 堆排序 ...
- python遍历数组冒泡排序_经典排序算法(冒泡排序,选择排序,插入排序,快速排序,堆排序)python实现...
最近在复习经典排序算法,自己用python也实现了一下,这里不会涉及到原理(因为网上方法已经很详细啦),就把函数贴上来,可以让大家自己试着运行下,再结合别处的原理也可以更好地理解它们的实现. 如果有错 ...
- java冒泡排序_JAVA实现经典排序算法(冒泡排序、选择排序、插入排序、希尔排序、堆排序、归并排序、快速排序)...
冒泡排序 依次比较相邻的元素,若发现逆顺序,则交换.小的向前换,大的向后换,本次循环完毕之后再次从头开始扫描,直到某次扫描中没有元素交换,说明每个元素都不比它后面的元素大,至此排序完成. import ...
- 【完整可运行源码+GIF动画演示】十大经典排序算法系列——冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序
以前也零零碎碎发过一些排序算法,但总是不系统, 这次彻底的对排序系列做了一个整体的规划, 小伙伴们快快mark哦~ [GIF动画+完整可运行源代码]C++实现 冒泡排序--十大经典排序算法之一 [GI ...
最新文章
- 面试之Hashtable和ConcurrentHashMap
- CNN网络加速--Performance Guaranteed Network Acceleration via High-Order Residual Quantization
- IIS7.5部署ASP.NET失败
- mysql所有知识点总结_MySQL知识点总结
- ajax登陆返回值判断,一个简单的ajax用户登陆返回值问题?有代码
- Codeforces 516D Drazil and Morning Exercise (栈、二分)
- java 弱引用定位_手把手教你定位常见Java性能问题
- Python论做游戏外挂,Python输过谁?
- C++ 全局变量 静态变量 全局函数 静态函数
- 同济大学软件学院院长谈嵌入式方向选择
- 轮廓(图形)之凹点切分
- 二值化及伽马调整的函数
- win10自带ubuntu桌面_windows10开启 linux子系统桌面,巨详细,值得一藏
- Maven编译Docker 镜像并推送到Nexus
- Android界面美化的一点点积累
- python爬去新浪微博_荐爬虫实战 新浪微博爬取 详细分析
- Xcode 构建优化全指南
- 基于点云数据提取道路标线的思路
- 双目摄像头(CSI-IMX219)的标定
- java escpos_Java通过ESC/POS指令打印条码