[C语言] 选择排序之直接选择排序的特性及实现

[C语言] 选择排序之直接选择排序的特性及实现

 

1、算法特性

  直接选择是一种简单、不稳定的选择排序方法,属于最为基础的排序方法之一。

  其时间复杂度最好情况为O(n²)、最差为O(n²)、平均为O(n²),空间复杂度为O(1)。

 

2、算法思路:

  以升序排列为例,先设置一个临时变量index_nmax存储最大值的下标,初始一般假设为下标0,再将选定值与其之后的数据依次比较:当比较值比选择值大时,index_nmax更新为比较值的下标,之后继续检索,直到无序序列结束为止;当比较值小于等于插入值时,index_nmax不更新,选择值继续向后检索,直到无序序列结束为止。一轮循环过后将arr[index_nmax]与无序序列队尾交换位置,经过len-1循环便可以将所有数据排列有序。

  下图与本博客算法本质上是相同的,博客中选择最大值来排序,图中是选择最小值来排序:

 

3、实现代码

 1 #include <stdio.h>
 2 
 3 // 选择排序:相邻两个元素进行比较,把大的元素的下标记录下来,一轮完整的比较之后,若最大值的下标不是len-i,则两个元素交换位置
 4 void select_sort(int arr[],int len)
 5 {
 6     for(int i=0; i<len; i++) // 总共要找len-1次最大值,每次找最大值的区间 [0,len-i]
 7     {
 8         int index_nmax = 0;
 9         for(int j=1; j<len-i; j++) // 因为假设了0下标就是最大值,所以循环可以从1开始
10         {
11             if(arr[j] > arr[index_nmax])
12             {
13                 index_nmax = j;
14             }
15         }        
16         if(index_nmax != len-i-1) // 避免无意义的位置交换
17         {
18             int tmp = arr[index_nmax];
19             arr[index_nmax] = arr[len-i-1];
20             arr[len-i-1] = tmp;
21         }
22     }    
23 }
24 
25 int main()
26 {
27     int arr[] = {53,82,9,233,43,14,55,9,4,67};
28     int len = sizeof(arr)/sizeof(arr[0]);
29 
30     travel(arr,len);
31     select_sort(arr,len);
32     travel(arr,len);
33 
34 /*  travel(arr,len);
35     cooktail_sort(arr,len);
36     travel(arr,len);*/
37 
38     return 0;
39 }

 

 

4、测试结果

转载于:https://www.cnblogs.com/usingnamespace-caoliu/p/9428115.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/366269.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电脑测速软件_联通你我【宽带提速】让网速飞!超实用的宽带测速提速攻略来啦!...

宅在家里&#xff0c;在家娱乐、在家办公、在家上课&#xff0c;都需要畅快的宽带网络&#xff0c;所以很多小伙伴都办理了联通宽带怎样才是正确的宽带测速姿势&#xff1f;小沃给大家介绍两种简便的测速方法&#xff0c;同时说说怎样才能完全释放宽带网速、让咱享受到真正的提…

MyEclipse - 查询使用的JDK版本

查询 MyEclipse 使用的 JDK 版本 MyEclipse 菜单->Windows->Proferences->java->Installs Jres重新设置JDK路径&#xff0c;改为开发程序时的JDK版本&#xff08;如上图&#xff09;&#xff08;我做到这一步就可以了&#xff01;我的eclipse是7.0&#xff0c;jdk…

解析什么是绝对定位,相对定位与浮动

在理解定位之前&#xff0c;先说一个概念&#xff0c;文档普通流&#xff0c;就是元素标签正常在HTML里的顺序&#xff0c;块级元素从上至下排列&#xff0c;行内元素从左到右排列。 绝对定位 绝对定位&#xff1a;absolute&#xff0c;元素相对于离它最近的已定位祖先元素进…

具有多个查询参数的Camel CXF服务

出色的Apache Camel团队忙于解决查询中多个参数的处理问题&#xff0c;这是一种解决方法。 希望该帖子将在下一版本的Camel中变得过时。 &#xff08;当前&#xff0c;我使用2.7.5&#xff09; 问题 大于1的查询参数作为null值传递给Camel-CXF服务。 假设网址中有四个查询参数…

《JavaScript高级程序设计》读书笔记(三)基本概念第四小节 操作符

内容---语法 上一小节---数据类型 本小节 操作符---流程控制语句---理解函数 操作符--操作数据值的操作符--算术&#xff08;如加减&#xff09;、位操作符、关系、相等--ECMAScript操作符可以适用于很多类型的值--在用于对象时&#xff0c;会先调用对象的valueOf()和&#xff…

el-table数据不显示_数据透视表,一篇就够了

| 函数部分告一段落&#xff0c;这一篇文章助你学懂数据透视表目录&#xff1a;一、创建数据透视表二、数据透视表字段列表值的显示方式三、分析1、切片器2、计算字段3、计算项4、组合四、设计1、分类汇总2、报表布局首先&#xff0c;我们要知道应用数据透视表的前提&#xff1…

app vue 真机运行_使用 HBuilder 将 Vue 项目打包成手机 App

在开发移动端 app 时可以选择原生 app 和 webapp&#xff0c; 原生 app 体验好&#xff0c;开发成本高&#xff0c;相对的 webapp 体验要差&#xff0c;开发成本低。webapp 要求很低&#xff0c;可以说只要会开发web 站就能开发 webapp&#xff0c;这里不讨论怎么选择&#xff…

解决安卓字体偏移:页面整体缩放

在h5中实现一些小标签、按钮的时候&#xff0c;很容易发现部分安卓机型上的字体显示有问题&#xff0c;总会向上偏移2px左右。这是设置padding或line-height无法修复的&#xff0c;与rem也无关&#xff0c;即使在字体大于12px时依然存在。下图来自于网友的分享&#xff0c;从左…

bmp调色板颜色信息重复_如何更改 Linux 终端颜色主题 | Linux 中国

你可以用丰富的选项来定义你的终端主题。-- Seth Kenlon如果你大部分时间都盯着终端&#xff0c;那么你很自然地希望它看起来能赏心悦目。美与不美&#xff0c;全在观者&#xff0c;自 CRT 串口控制台以来&#xff0c;终端已经经历了很多变迁。因此&#xff0c;你的软件终端窗口…

mac 配置java adb环境_MAC 配置android adb命令的环境变量

1,打开终端&#xff0c;敲入命令&#xff1a;sudo vi .bash_profile (如果有密码就为本机登录密码)(如果没有这个文件就会创建一个新的)默认终端目录如图&#xff0c;生成的文件为隐藏文件&#xff1a;(显示隐藏文件命令&#xff1a;defaults write com.apple.finder AppleSho…

mac懒人版_这些实用的Mac软件你迟早会用到,建议收藏!

日常使用mac&#xff0c;遇到不同的问题可以通过不同的应用进行来进行处理&#xff0c;所以称手的工具是必不可少的。然而这些问题也会引导我们去发现更多实用优秀的软件&#xff0c;今天macdown就把自己在使用Mac过程中遇到的一些实用的Mac软件推荐给大家&#xff0c;相信你迟…

Metro风格的Java组合框(JMetro)–重新介绍

我上一篇有关JMetro的文章–我的都市风格的Java外观&#xff08;或外观&#xff09;是关于日历选择器控件的外观 。 我本打算使用Tom Eugelink不错的日历选择器&#xff0c;但是当时我了解到它是由Oracle创建并随Java 8一起交付的&#xff0c;因此出于时间的考虑&#xff08;几…

左斜杠和右斜杠有什么区别_「斜杠云」SEO推广和SEO优化有什么区别?

1&#xff0c;首先&#xff0c;从概念上来说&#xff0c;网络推广就是企业从开始申请域名、租用空间、网站备-案、建立网站、直到网站正式上线开始就算是介入了网络推广活动&#xff0c;而通常我们所指的网络推广是指通过互联网的种种手段&#xff0c;进行的宣传推广等活动&…

python算两个时间之间的天数,将天数转成int型

import time import datetime#计算两个日期相差天数&#xff0c;自定义函数名&#xff0c;和两个日期的变量名。 def Caltime(date1,date2):#%Y-%m-%d为日期格式&#xff0c;其中的-可以用其他代替或者不写&#xff0c;但是要统一&#xff0c;同理后面的时分秒也一样&#xff1…

并发编程-concurrent指南-阻塞队列BlockingQueue

阻塞队列BlockingQueue&#xff0c;java.util.concurrent下的BlockingQueue接口表示一个线程放入和提取实例的队列。 适用场景&#xff1a; BlockingQueue通常用于一个线程生产对象&#xff0c;而另一个线程消费对象的场景。 一个线程往里面放&#xff0c;另一个线程从里面取的…

博主自制丨免费下载丨免费使用丨仅用于测试

链接&#xff1a;点我立即下载 提取码&#xff1a;0j6h

CSS 小结笔记之em

1、为什么使用em em也是css中的一种单位&#xff0c;和px类似。很多人会疑惑为什么有了px之后还要使用em&#xff0c;而且em使用起来相对于px来讲比较麻烦。 em主要是应用于弹性布局&#xff0c;下面给出一个小栗子说明em的强大之处 <!DOCTYPE html> <html lang&quo…

java 向父类_Java基础——面向对象(Object父类)

原标题&#xff1a;Java基础——面向对象(Object父类)声明&#xff1a;本栏目所使用的素材都是凯哥学堂VIP学员所写&#xff0c;学员有权匿名&#xff0c;对文章有最终解释权&#xff1b;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。Object 父类&#xff1a;Object的方法…

fedora 不在sudoers文件中_COPR 仓库中 4 个很酷的新软件(2019.4) | Linux 中国

COPR 是个人软件仓库集合&#xff0c;它不在 Fedora 中。这是因为某些软件不符合轻松打包的标准。或者它可能不符合其他 Fedora 标准&#xff0c;尽管它是自由而开源的。-- Dominik TurecekCOPR 是个人软件仓库集合[1]&#xff0c;它不在 Fedora 中。这是因为某些软件不符合轻松…

弹性盒布局实例

今天给大家搞一个弹性盒布局的实例&#xff0c;最近一直在复习一些基础的东西&#xff0c;所以一直会跟大家分享一些基础的东西 说实话&#xff0c;最近感觉被掏空了&#xff0c;别问我为什么&#xff0c;谁去保健谁知道&#xff0c;哈哈&#xff0c;注意安全&#xff0c;好了步…