【专插本-数据结构】简单选择排序
简单选择排序
简单选择排序的思想就是将未排序的子序列中最小的值(或者最大的值)排列到已经排好序的子序列后面
- 设置两层循环,第一层循环是遍历已经排好序的子序列,每次都指向该子序列的最后一个元素
- 第二层序列用来遍历后面没有排好序的序列,每次循环,都找到最小或者最大的元素,然后放到已经排好序的子序列后面
- 第一层循环从第一个元素开始,到第
len - 1
个元素结束,因为最后一个元素一定是最值元素 - 第二层循环从已经排好序的序列的后一个元素开始,到第
len
个元素位置结束,因为要遍历整个无序子序列
算法分析
- 时间复杂度:
- 最好的情况是正序,不需要移动;最坏的情况就是逆序,移动
3(n-1)
次 - 无论记录的初始排序如何,需要进行比较次数都是相同的,所以简单选择排序的时间复杂度是
O(n^2)
- 最好的情况是正序,不需要移动;最坏的情况就是逆序,移动
- 空间复杂度:
- 只有两个记录交换时需要一个辅助空间,所以空间复杂度为
O(1)
- 只有两个记录交换时需要一个辅助空间,所以空间复杂度为
特点
- 就选择排序本身来说,它是一种
稳定排序
- 可以用于链式结构
- 移动记录比较少,当一个记录占用空间比较多时,这个方法比直接插入排序来的快
C语言实现
/*** 简单选择排序*/
void selectSort(int arr[],int len)
{for (int i = 0; i < len - 1;i++){int min = i;for (int j = i + 1; j < len;j++){if(arr[j] < arr[min])min = j;}int temp = arr[min];arr[min] = arr[i];arr[i] = temp;}
}
【专插本-数据结构】简单选择排序相关推荐
- 数据结构 - 简单选择排序法
数据结构 - 简单选择排序法 在之前的博文里已经介绍过排序的两个基本方法: 双重循环法和冒泡排序法. 基本思想 其实上面两种方法的基本思想都是一样的: 就是将排序步骤分成两层循环, 在内层的每1个循环 ...
- 数据结构-简单选择排序(C语言)
文章目录 1.基本思想: 2.例子讲解: 3.代码实例C语言: 4.时间复杂度分析 1.基本思想: 第i趟排序开始时,当前有序区和无序区分别为R[0-i-1],R[i-n-1] (0<=i< ...
- 数据结构-选择排序(简单选择排序,堆排序)
目录 1,简单选择排序 1.1,简单选择排序思想 1.2,选择排序的时间复杂度分析 1.3,简单选择排序代码实现 2,堆排序 2.1,什么是堆排序 2.2,堆排序的思想 2.3,堆排序时间复杂度分析 ...
- 《大话数据结构》第9章 排序 9.4 简单选择排序
9.4.1 简单选择排序算法 爱炒股票短线的人,总是喜欢不断的买进卖出,想通过价差来实现盈利.但通常这种频繁操作的人,即使失误不多,也会因为操作的手续费和印花税过高而获利很少.还有一种做股票的人,他们 ...
- 【数据结构-排序】3.图解选择排序两种实现(简单选择排序/堆排序)
简单选择排序(选择排序) 排序思想 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置 然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾. 以此类推,直到所有元素 ...
- Hark的数据结构与算法练习之简单选择排序
/** 简单选择排序*/ public class SimpleSort {public static void main(String[] args) {int[] arrayData = { 5, ...
- 数据结构排序系列详解之五 简单选择排序
在前面的博客中已经讲述了交换类的排序算法,这节中开始说说选择类的排序算法了,首先来看一下选择排序的算法思想: 选择排序的基本算法思想: 每一趟在 n-i+1 (i=1,2,3,--,n-1)个记录中选 ...
- 数据结构(八):排序 | 插入排序 | 希尔排序 | 冒泡排序 | 快速排序 | 简单选择排序 | 堆排序 | 归并排序 | 基数排序 | 外部排序 | 败者树 | 置换-选择排序 | 最佳归并树
文章目录 第八章 排序 一.排序的基本概念 (一)什么是排序 (二)排序的应用 (三)排序算法的评价指标 (四)排序算法的分类 (五)总结 二.插入排序 (一)算法思想 (二)算法实现 (三)算法效率 ...
- 数据结构-排序(六)简单选择排序
本文详细介绍了简单选择排序的算法思想.代码实现和算法效率分析,还包括示例和可视化动图,易理解! Let's go!
最新文章
- C语言--const修饰指针解析
- 一次实现可以在某些场合替代菱形继承?
- python合并路径_python url合并与分离
- 【已解决】TypeError: bind() takes exactly one argument (2 given)
- 新基建来了!5G边缘计算如何展现勃勃生机?
- 微信淘宝等平台要互通!?腾讯阿里字节回应
- 初学Java,第一段代码
- 【图像加密】基于matlab GUI彩色图像加密解密(带面板)【含Matlab源码 1231期】
- php streamsocketenablecrypto,PHPMailer发送邮件报错Msg:stream_socket_enable_crypto():
- WiFi连接过程简要分析
- 安装深度linux系统卡住不动,简单有效!一招解决深度Linux死机问题
- TSC条码打印机 条形码ActiveXbarcode()方法参数详解
- 工作中jQuery常用实例-主要功能总结整理
- spark中的cache()、persist()和checkpoint()的区别
- 饭后吃一种水果就能化痰止咳(附赠10个化痰小偏方)
- linux内核分析 轮换,Linux 内核源代码情状分析 chap2 存储管理 (6) - 页面的定期换出...
- Oracle(二)Oracle sql操作
- Win11系统.NET Framework 3.5怎么启用?
- 论文查重高怎么办?怎么修改?
- c语言是面向对象程序设计,C语言面向对象程序设计.ppt
热门文章
- 行业云赋能产数融合,云服务加速行业渗透
- Markdown中的公式、字母表示汇总
- 流水线技术是通过增加计算机硬件来实现的,学位论文--流水线仿真-实现与设计.doc...
- realme 真我 V23i配置怎么样 realme 真我 V23i价格是多少
- 2.Java Web之JavaScript
- 洗地机哪个牌子比较好?家用洗地机推荐
- 十年辗转4厂,百场校、社招面试后,我想给“后生仔”分享的一些秘密!
- EMM产品哪些功能特性只有在国内市场才被关注?
- (努比亚)手机键盘恢复
- [No000021]跟维多利亚学英语