简单选择排序(四种常见排序之一)

选择排序:简单选择、树形选择 选择排序(Selection Sort):经过一趟排序,可以从n-i+1(i=1,2...)个记录中选取关键字最小的记录作为有序序列中第i个记录。也就是说,每一趟排序,都会排好一个元素的最终位置。 其中最简单的是 简单选择排序(Simple Selection Sort) 简单选择排序的思想是 在每一趟排序中,通过n-i次关键字的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录 阅读详情

简单选择排序

  • 在简单选择排序过程中,所需移动记录的次数比较少。最好情况下,即待排序记录初始状态就已经是正序排列了,则不需要移动记录。

  • 最坏情况下,即待排序记录初始状态是按第一条记录最小,之后的记录从小到大顺序排列,则需要移动记录的次数最多为3(n-1)。简单选择排序过程中需要进行的比较次数与初始状态下待排序的记录序列的排列情况无关。当i=1时,需进行n-1次比较;当i=2时,需进行n-2次比较;依次类推,共需要进行的比较次数是(n-1)+(n-2)+…+2+1=n(n-1)/2,即进行比较操作的时间复杂度为O(n^2),进行移动操作的时间复杂度为O(n)。

  • 简单选择排序是不稳定排序。

  • 排序函数
    若当前值,比之前的值大,就将其互换位置,若比较之后,无变化,则顺序不变。

void SelectSort(int arr[10])
{
 int tmp;
 for(int i=0;i<10;i++)
 {
  for(int j=0;j<9;j++)
  {
   if(arr[j] > arr[j+1])
   {
    tmp = arr[j];
    arr[j] = arr[j+1];
    arr[j+1] = tmp;
   }
  }
 }
}
  • 打印函数
void Show(int arr[10])
{
 for(int i=0;i<10;i++)
 {
  printf("%d ",arr[i]);
 }
 printf("\n");
}
  • 主函数
int main()
{
 int arr[10] = {1,10,3,6,8,4,67,9,0,2,};
 SelectSort(arr);/*调用函数*/
 Show(arr);/*调用打印函数*/
 return 0;
}
嵌入式100题(47):各种排序算法什么时候有最好情况、最坏情况(尤其是快排)... 各种排序算法什么时候有最好情况、最坏情况(尤其是快排) 直接插入排序:最坏情况需要比较O(n^2)次(n(n - 1)/2次)(有争议)。 简单选择排序:无论是否最坏都需要O(n^2)次(n(n - 1)/2次)。 冒泡排序:需要比较O(n^2)次(n(n - 1)/2次),即序列逆序的情况。 堆排序:无论是否最坏比较O(nlog2n)次。 快速排序:最坏情况退化为冒泡排序,需要比较... 阅读详情

相关推荐

常见排序算法

排序算法的稳定性是指在待排序的序列中,存在多个相同的元素,若经过排序后这些元素的相对词序保持不变,即Xm=Xn,排序前m在n前,排序后m依然在n前,则称此时的排序算法是稳定的。先介绍一下常见的排序算法: 直接插入排序、简单选择排序、冒泡排序、快速排序这四种排序.一、直接插入排序&lt;稳定&gt;算法思路: 先将序列中第1个记录看成一个有序子序列, 然后从第2个记录开始,逐个进行插入,直至整个序列...

Guizy 332

选择类排序法

选择类排序法 (1)简单选择排序法,最坏情况需要n(n-1)/2次比较; 设所排序序列的记录个数为n。i取1,2,…,n-1,从所有n-i+1个记录(Ri,Ri+1,…,Rn)中找出排序码最小的记录,与第i个记录交换。执行n-1趟 后就完成了记录序列的排序。该排序是不稳定排序。 //简单选择排序法 public class SimpleSelectSort { static int...

weixin_41924879的博客 866

告别AT串口线!用STM32F407的USB FS口直连EC800M进行物联网通信

本文介绍了一种创新的物联网通信方案,利用STM32F407的USB FS接口直连EC800M模块,替代传统的AT串口线连接。通过详细的硬件对比、STM32CubeMX配置和USB驱动调试步骤,展示了如何实现更高效的AT指令通信,同时降低硬件复杂度和功耗。

weixin_29189987的博客 707

排序算法最坏情况下的比较次数

在最坏情况下,冒泡排序、直接插入排序与简单选择排序法均需要比较n(n-1)/2次。希尔排序需要比较n^1.5次,堆排序需要比较的次数最少,为nlog2n。

Tang4109的博客 2万+

华为、Cisco、H3C、中兴网络设备如何配置syslog日志采集

华为、Cisco、H3C、中兴网络设备如何配置syslog日志采集

weixin_40239644的博客 8707

GNSS接收机性能测试指标详解:TTFF、位置精度、灵敏度等关键参数如何评估

本文详细解析了GNSS接收机性能测试的关键指标,包括首次定位时间(TTFF)、位置精度、灵敏度等,帮助工程师系统评估接收机性能。通过多频段协同定位和载波相位测试等技术,提升定位精度至亚米级。同时,介绍了灵敏度测试的极限挑战和授时精度的专业测试方案,为GNSS接收机的性能优化提供实用指导。

cuda7parallel的博客 965

算法与数据结构复习 第七章 排序(详解)

第七章 排序 书面作业 一、判断题 1、仅基于比较的算法能得到的最好的“最坏时间复杂度”是 O(NlogN)。 (T) 解析: 下界 所谓“下界”, 顾名思义就是对于一个长度为n的序列所需要的最少比较次数。 最优下界 什么时候最优?决策树从根节点到叶节点的最短长度为n-1,既长度为n的序列本身就是有序(序列从左到右,以升序表示为有序)时就是最优情况,冒泡排序和直接插入法在最优情况下时间复杂...

好学者的博客 1万+

手把手教你用思岚RPLIDAR C1激光雷达实现简单环境扫描(树莓派4B+Ubuntu22.04)

本文详细介绍了如何在树莓派4B(Ubuntu 22.04系统)上驱动思岚RPLIDAR C1激光雷达,从硬件连接、权限配置、SDK编译到运行示例程序,最终实现环境扫描数据的可视化。通过手把手教程,帮助开发者和爱好者快速上手激光雷达应用,构建简单的环境扫描图。

j2k3l4的博客 1133

排序算法之简单选择排序

我们在上篇博客中复习了插入排序的相关知识,有了插入排序的基础理解今天的选择排序其实是很easy的。选择排序和冒泡排序是大学时期刚接触排序算法时接触的两种基础排序算法,因为近期打算把各类学过的以及没学过的排序算法都过一遍,所以今晚先把选择排序算法过一遍,之后有时间我会继续把冒泡排序算法过一下。 现在我们来看一下选择排序: 一.选择排序 1.1 原理 假设我们按照从小到大的顺序对数组排序,那么选择排序...

qq_36464947的博客 1862

DCA1000EVM数据采集实战:从mmWave Studio配置到MATLAB后处理的全链路解析

本文详细解析了DCA1000EVM数据采集的全流程,从mmWave Studio配置到MATLAB后处理,涵盖数据存储结构解析、后处理引擎剖析及Python数据处理方案。通过实战案例,帮助开发者高效处理毫米波雷达原始数据,实现从数据到应用价值的转化,提升开发效率。

weixin_33743661的博客 709

浅谈迪杰斯特拉(Dijkstra)算法和A*算法原理及实现

迪杰斯特拉(Dijkstra)算法和A*算法的原理及实现。

Guo_Zhanyu 9600

四种常见的排序(冒泡、简单选择、直接插入、快速)

1、冒泡排序 static void BubBlingSort(params int[]array )//参数数组 { for (int i = 0; i < array.Length-1; i++)//冒泡的轮数 { bool a = true;//定义一个bool值 for (int j = 0; j < array.Length-1-i; j++)//依次遍

qq_59943770的博客 623

使用Python开发TreeATE的测试脚本常见问题

ImportError: No module named py_compile 找不到 DevLangPython3.dll 以上2个问题都是没有安装正确的Python,当前TreeATE依赖32位Python 2.7版本,暂时不支持Python 3以上版本

蓝白云的专栏 1033

几种常见简单排序算法

几种简单排序算法

LDL 4702

【Python爬虫案例教学】超简洁代码采集原神所有角色信息

(。・∀・)ノ゙嗨 大家好,这里是池鱼

xiaoyuan_____的博客 2421

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

简单选择,冒泡,插入,快速排序之效率比较

简单选择,冒泡,插入,快速排序之效率比较 这四种耳熟能祥的排序算法,找了个时间自己去重写研究了一遍,考察了他们的运行效率问题。当然对于一些初级的程序员千万别在拿着选择排序当冒泡排序的用了。所有的排序都是根据自己对排序思想的理解后编写的,如有不正确的地方还请提出。 简单选择排序:每次从数组序列中选择一个元素与其他所有元素进行比较,每趟可以确定序列中最小的元素。 public static vo

fenfei_zqh的博客 2003

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

排序算法第一篇(简单桶排、选择排序、冒泡排序、快速排序)

简单桶排序 1 /** 2 * @author: 攻城狮小白 3 * @creationTime:2017年11月24日 下午10:37:59 4 * @description: 桶排序(这个不是真正的桶排,真正的桶排比这个稍微复杂些。但是是桶排的思想,就叫它简单桶排吧) 5 * @questionDesc:一个班上有6名同学,考试成绩如下arr数组(满...

weixin_30675967的博客 139

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

简单选择排序

文章目录简单选择排序的工作原理时间复杂度分析案例分析代码实现 简单选择排序的工作原理 选择排序(Selection sort)是一种简单直观的排序算法。 它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 选择排序的主要优点与数据移动有关。如果某个元素位于正确的...

Joy 3万+

常见的四种排序方法

冒泡排序 思路分析:在要排序的一组数中,对当前还未排好的序列,从前往后对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。 冒泡排序的算法原理(从后往前): 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步

王小雨的博客 1万+

选择类排序法 — 简单选择排序

9.4 选择类排序法 选择排序的基本思想是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。我们主要介绍简单选择排序、树型选择排序和堆排序。    简单选择排序 简单选择排序的基本思想:第i趟简单选择排序是指通过n-i次关键字的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录进行交换。共需进行i-1趟比较,直到所有记录排序完成为止

Rprop 2万+

选择排序之简单选择排序

选择排序的原理:选择排序的主要操作是选择,主要思想:每趟排序在待排序序列中选择最小的元素记录,添加到有序序列中。选择排序主要有简单选择排序(直接选择排序)和堆排序,堆排序算法可以看作是简单选择排序算法的改进;这里主要介绍简单选择排序算法。...

m0_64529905的博客 3070

四种简单的排序算法

我觉得如果想成为一名优秀的开发者,不仅要积极学习时下流行的新技术,比如WCF、Asp.Net MVC、AJAX等,熟练应用一些已经比较成熟的技术,比如Asp.Net、WinForm。还应该有着牢固的计算机基础知识,比如数据结构、操作系统、编译原理、网络与数据通信等。有的朋友可能觉得这方面的东西过于艰深和理论化,望而却步,但我觉得假日里花上一个下午的时间,研究一种算法或者一种数据结构,然后写写心得,

祈离的专栏 1559

简单选择排序详解

1、什么是选择排序? 选择排序是第一次从待排序的元素中选取最大值(或者最小值),将其放在序列的最前面,再从剩下的待排序元素中选取最大值(或者最小值)放入序列的最后,重复该操作直到剩下的待排序的元素的个数是0,选择排序是一种简单直观的排序算法。 2、简单选择排序和堆排序的关联 选择排序是从待排序的元素中选择最大值(或者最小值),然后将其放入序列中排序。选择排序分为简单选择排序和堆排序,简单选择排序和堆排序的区别在:从待排序的元素中选择最大值(或者最小值)的方式不同,简单排...

weixin_44713306的博客 7023

C语言四种简单排序

冒泡排序 #include<stdio.h> int main() { int i,j,temp,n; int arr[20]; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&arr[i]); } //结果相同的两种for循环 for(i=n-1;i&gt...

天上飞的云传奇 1104

选择排序(简单选择排序和堆排序)

选择排序的基本思想:每一趟(例如第i趟)在后面n-i+1(i=1,2,…n-1)个待排序元素中选取关键字最小的元素,作为有序子序列的第i个元素,直到第n-1趟做完,待排序元素只剩下了1个,就不用再选了。 1.简单选择排序 简单排序算法思想:假设排序表为L[1…n],第i趟排序即从L[i…n]中选择关键字最小的元素与L(i)交换,每一趟排序可以确定一个元素的最终位置,这样经过n-1趟排序就可以使得整个排序表有序。代码如下: #include<cstdio> #include<iostream

xiaoyong5854的博客 1439
上一篇: 折半查找
下一篇: 杨辉三角(个人觉得值得总结的东西)
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值