两种选择排序算法:简单选择排序、堆排序
一、简单选择排序
空间复杂度:O(1)
时间复杂度:O(n^2)
稳定性:不稳定
适用性:顺序表、链表
//简单选择排序
void SelectSort(int A[],int n){for(i=0;i<n-1;i++){min=i;for(j=i+1;j<n;j++){if(A[j]<A[min])min=j;}if(min!=i)swap(A[i],A[min]);}
}
二、堆排序
空间复杂度:O(1)
时间复杂度:O(nlogn)
稳定性:不稳定
//堆排序
//首先,建立大根堆
void BuildMaxHeap(int A[],int len){for(int i=len/2;i>=1;i--){HeadAdjust(A,i,len);}
} //将以k为根的子树进行调整,可以将该子树变成大根堆
void HeadAdjust(int A[],int k,int len){A[0]=A[k]; //先把根结点存起来for(i=2*k;i<=len;i*=2){if(i<len&&A[i+1]>A[i]) //右子树的值大于左子树i++;if(A[0]>=A[i]){break;}else{A[k]=A[i];k=i;}}A[k]=A[0]; //k所指的位置为原来的根结点最后存放位置
}//堆排序代码
void HeapSort(A[],int len){BuildMaxHeap(A,len); //建立大根堆 for(i=len;i>1;i--){swap(A[i],A[1]); //此时把A[1]放到了堆底,也就是数组的末尾 HeadAdjust(A,1,i-1); }
}
两种选择排序算法:简单选择排序、堆排序相关推荐
- java中的排序算法——简单选择排序,树形选择排序与堆排序(一)
package com.sort; /** * 选择排序: * 简单选择排序,树形选择排序与堆排序 * */ public class SelecSortDemo { /** * ----- ...
- 排序算法——简单选择排序(PythonJava)
基本思想 在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换:然后在剩下的数当中再找最小(或者最大)的与第2个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素( ...
- 排序算法-简单选择排序
文章目录 1.基本介绍 2.选择排序的思想 3.选择排序思路分析图 4.代码实现 1.基本介绍 选择排序属于内部排序算法,是从预排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的 ...
- 排序算法 | 简单选择排序,算法的图解、实现、复杂度和稳定性分析
今天讲解一下简单选择排序的原理以及实现.复杂度和稳定性分析 这个内容很简单,轻松加愉快,很快就过了~ 目录 简单选择排序 1 基本思想 2 动态图解 3 代码 4 复杂度分析 简单选择排序 1 基本思 ...
- 排序算法之选择排序(简单选择排序、堆排序)
选择排序(简单选择排序.堆排序) 选择排序 简单选择排序 概念 算法实现 堆排序 概念 算法实现 后续 选择排序 选择排序的基本思想是:每一趟在待排序元素中选取关键字最小(或最大)的元素加入有序子序列 ...
- 堆排序算法c语言筛选法,【排序】排序算法之选择排序
排序算法之选择排序 罗朝辉(http://www.cppblog.com/kesalin) 转载请注明出处 排序是数据处理中经常使用的一种重要运算,在计算机及其应用系统中,花费在排序上的时间在系统运行 ...
- 八大排序算法-简单排序(3种)
八大排序算法-简单排序 javascript-选择排序 jacascript-冒泡排序 jacascript-插入排序 javascript-选择排序 算法思想:简单选择排序是最简单直观的一种算法,基 ...
- 选择排序算法流程图_常用排序算法之选择排序
前两天给大家分享了冒泡排序和插入排序(没关注的同学,可以关注后查看历史消息),今天继续给大家分享另一种常用的排序算法--选择排序. 选择排序 选择排序和插入排序很相似,也区分已排序区间和未排序区间,选 ...
- 【排序算法】选择排序(Selection sort)
选择排序(Selection sort)是一种简单直观的排序算法. 选择排序介绍 它的基本思想是: 首先在未排序的数列中找到最小(or最大)元素,然后将其存放到数列的起始位置:接着,再从剩余未排序的元 ...
- 【排序算法】选择排序(C语言)
[排序算法]-- 选择排序 目录 一.选择排序的原理 二.选择排序的代码实现 三.选择排序的优化 1. 优化思路 2. 排序优化后问题 3. 优化代码的实现 四.选择排序的效率 一.选择排序的原理 ...
最新文章
- Linux下编译安装Boost1.66
- 如何设置不一样的奇偶页页眉?
- 关于Linux路由表的route命令(转)
- Android调用手机浏览器打开某网页出现异常情况
- wait(),notify(),notifyAll()进行了详细的分析介绍
- C语言指针——基础知识理解
- 第一章 基于任务的程序设计
- 【转载】Mysql注入点在limit关键字后面的利用方法
- mybaitis快速生成_Mybatis中使用mybatis-generator结合Ant脚本快速自动生成Model、Mapper等文件...
- 桌面下雪软件测试工程师,Xsnow - 在Ubuntu 18.04及更高版本的桌面上下雪
- 图片一句话木马简单制作方法
- 高斯win和linux,微软雅黑在 win 和 Linux 下安装使用的对比
- 捋一捋Unified Language Model Pre-training for Natural Language Understanding and Generation
- 三十岁,研究生毕业的你,现在收入多少?
- 基于分布式的智联招聘数据的大屏可视化分析与预测
- 【实例演示】Android安全须知
- 添加域后如何将域用户加入本地管理员组
- ens天空盒_这句话的意思
- 图形界面介绍Create Placement Blockage
- 腾讯人均月薪7.5w,我这是又被平均了?
热门文章
- ​​​​​​​CV:利用cv2(加载人脸识别xml文件及detectMultiScale函数得到人脸列表)+keras的load_model(加载表情hdf5、性别hdf5)并标注
- usaco2013 mar【懒惰的奶牛】
- cnpm与npm指定有什么区别?
- python记录_day14 内置函数二 迭代 二分法
- java.lang.NullPointerException 空指针异常问题
- jQuery选择器整理
- vaddin使用技巧
- 第七章 综合练习 第四题
- Prism4文档翻译(第四章 第一部分) 转载bluesky234
- 【烙铁使用规范】—— 烙铁使用、温度测量规范