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);}
}

数据结构:排序算法之堆排序和选择排序相关推荐

  1. 【排序算法】图解简单选择排序(图解堪比Debug显示每次循环结果)

    [排序算法]图解简单选择排序(图解堪比Debug分析每次循环结果) 写在前面: 本文主要介绍简单选择排序算法,通过图片一步步解释每一趟每一次的后移.代码通过C#实现,并输出每一次交换的情况和比较次数, ...

  2. 加标志量的选择排序算法c语言,置换选择排序算法详解(C语言实现)

    上一节介绍了增加 k-路归并排序中的 k 值来提高外部排序效率的方法,而除此之外,还有另外一条路可走,即减少初始归并段的个数,也就是本章第一节中提到的减小 m 的值. m 的求值方法为:m=⌈n/l⌉ ...

  3. 【简单排序算法】:简单选择排序、直接插入排序和冒泡排序

    [简单排序算法]:简单选择排序.直接插入排序和冒泡排序 简单选择排序: 原理:设所排序序列的记录个数为n.i取1,2,-,n-1,每次从所有n-i+1个记录(Ri,Ri+1,-,Rn)中找出最小的记录 ...

  4. C语言排序算法(一)——选择排序实现

    C语言排序算法(一)--选择排序实现 编写程序,实现从键盘输入10个数,并用选择法从小到大排序. 简单选择排序的基本思想:第1趟,在待排序记录r[1]r[n]中选出最小的记录,将它与r[1]交换:第2 ...

  5. [ 数据结构 -- 手撕排序算法第四篇 ] 选择排序

    手撕排序算法系列之第四篇:选择排序. 从本篇文章开始,我会介绍并分析常见的几种排序,大致包括直接插入排序,冒泡排序,希尔排序,选择排序,堆排序,快速排序,归并排序等. 大家可以点击此链接阅读其他排序算 ...

  6. 十大排序算法:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序

    冒泡排序.选择排序.插入排序.希尔排序.归并排序.快速排序.堆排序.计数排序.桶排序.基数排序的动图与源代码. 目录 关于时间复杂度 冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 堆排序 ...

  7. python遍历数组冒泡排序_经典排序算法(冒泡排序,选择排序,插入排序,快速排序,堆排序)python实现...

    最近在复习经典排序算法,自己用python也实现了一下,这里不会涉及到原理(因为网上方法已经很详细啦),就把函数贴上来,可以让大家自己试着运行下,再结合别处的原理也可以更好地理解它们的实现. 如果有错 ...

  8. java冒泡排序_JAVA实现经典排序算法(冒泡排序、选择排序、插入排序、希尔排序、堆排序、归并排序、快速排序)...

    冒泡排序 依次比较相邻的元素,若发现逆顺序,则交换.小的向前换,大的向后换,本次循环完毕之后再次从头开始扫描,直到某次扫描中没有元素交换,说明每个元素都不比它后面的元素大,至此排序完成. import ...

  9. 【完整可运行源码+GIF动画演示】十大经典排序算法系列——冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序

    以前也零零碎碎发过一些排序算法,但总是不系统, 这次彻底的对排序系列做了一个整体的规划, 小伙伴们快快mark哦~ [GIF动画+完整可运行源代码]C++实现 冒泡排序--十大经典排序算法之一 [GI ...

最新文章

  1. 面试之Hashtable和ConcurrentHashMap
  2. CNN网络加速--Performance Guaranteed Network Acceleration via High-Order Residual Quantization
  3. IIS7.5部署ASP.NET失败
  4. mysql所有知识点总结_MySQL知识点总结
  5. ajax登陆返回值判断,一个简单的ajax用户登陆返回值问题?有代码
  6. Codeforces 516D Drazil and Morning Exercise (栈、二分)
  7. java 弱引用定位_手把手教你定位常见Java性能问题
  8. Python论做游戏外挂,Python输过谁?
  9. C++ 全局变量 静态变量 全局函数 静态函数
  10. 同济大学软件学院院长谈嵌入式方向选择
  11. 轮廓(图形)之凹点切分
  12. 二值化及伽马调整的函数
  13. win10自带ubuntu桌面_windows10开启 linux子系统桌面,巨详细,值得一藏
  14. Maven编译Docker 镜像并推送到Nexus
  15. Android界面美化的一点点积累
  16. python爬去新浪微博_荐爬虫实战 新浪微博爬取 详细分析
  17. Xcode 构建优化全指南
  18. 基于点云数据提取道路标线的思路
  19. 双目摄像头(CSI-IMX219)的标定
  20. java escpos_Java通过ESC/POS指令打印条码

热门文章

  1. const型数据小结
  2. Hystix熔断解决雪崩问题
  3. Datawhale MySQL 训练营 Task2 查询语句
  4. C#关键字的个人理解与注释
  5. poj2976 Dropping tests
  6. vs2017生成sqlserver 2017项目出现.Net SqlClient Data Provider: Msg 10343
  7. CentOS MySQL 5.7编译安装
  8. 单/双中括号与测试条件
  9. html解析のBeautifulSoup
  10. JavaScript Iframe富文本编辑器中的光标定位