选择排序算法(Selection Sort)原理及实现

选择排序算法,运行效率不高,但是非常容易理解,算法复杂度为 O(n^{2}) 。

原理:

假设要排序的数组的长度为n,将数组先分为两个部分,一个是有序区域部分,另一个为无序区域部分。初始时有序部分中没有元素,所有的元素都在无序区域中。第 1 趟遍历无序区域中的 n 个元素,从中选出最小的元素作为有序区域的第一个元素;第 2 趟遍历无序区域中剩下的 n-1 个元素,选出最小的元素作为有序区域的第二个元素。可以看到每遍历无序区域一遍,就找到其中最小的元素放入有序区的尾部,这样只要遍历n遍就能将无序区域中的所有元素按照顺序放入有序区域中了,也就完成了排序的操作。

代码实现:

#include <stdio.h>

int main() {
    int a[10];
    int n = 0, i, j, k, t;
    while (scanf("%d", &a[n])) {//输入任意个数字,遇到0时结束输入,记录个数n
        if (a[n] == 0) break;
        n++;
    }
    for (i = 0; i < n - 1; i++) {//选择排序,遍历n-1遍
        // 从数组开头到第i个元素的区间为有序区域, 无序区域紧接着有序区域
        // 内层循环就是遍历无序区域找到无序区域中最小的元素
        for (j = i + 1, k = i; j < n; j++) {//a[k]记录无序区域中最小元素,k为最小元素的下标
            if (a[j] < a[k]) k = j;
        }
        if (k != i) { // 如果最小值不是第i个元素,则将 a[i] 和 a[k]交换
            t = a[i];
            a[i] = a[k];
            a[k] = t;
        }
    }
    for (i = 0; i < n; i++) {
        printf("%d ", a[i]);
    }
    return 0;
}

可以看出代码的实现并没有遍历 n 遍,而是 n-1 遍,这是因为当无序区域中剩下最后一个元素的时候,该元素是在有序区域之后的,即最后无序区域剩下一个元素时数组已经是有序的了。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python学习:注释和运算符

python 注释 在Python中&#xff0c;注释用于在代码中添加解释、说明或者提醒&#xff0c;但并不会被解释器执行。Python中的注释以#开头&#xff0c;直到行末为止。下面是关于Python注释的详细解释和举例&#xff1a; 单行注释&#xff1a;使用#符号在行的开头添加注释&…

十四届蓝桥杯 冶炼金属(二分 / 公式)

二分代码1&#xff1a; #include<iostream> #include<cstdio> #include<cmath> using namespace std;int get(int a, int b){int l1;r1e91;while(l<r){int mid lr >>1;if(a / mid < b){r mid;}else l mid 1;}return l; } int main() {int n…

为什么技术人员副业赚钱那么难?

公众号&#xff1a;小北技术圈。 34岁老程序员&#xff0c;长期探索副业项目&#xff0c;写过IDEA插件&#xff0c;搞过工具导航&#xff0c;做过出海网站&#xff0c;运营过自媒体。欢迎提前探索35岁程序员的第二赛道。 每周分享干货内容。寻找100个技术人员&#xff0c;聚在…

2000-2021年各省研发强度数据(原始数据+计算结果)(无缺失)

2000-2021年各省研发强度数据&#xff08;原始数据计算结果&#xff09;&#xff08;无缺失&#xff09; 1、时间&#xff1a;2000-2021年 2、指标&#xff1a;RD经费内部支出&#xff08;万元&#xff09;、国内生产总值、研发强度 3、范围&#xff1a;31省 4、来源&#…

人工智能技术应用笔记(九):大道至简!提示词学习入门,看这一篇就够了!

本篇为《人工智能技术应用》专栏的第九篇。希望以学习笔记的形式和大家一起了解和探索人工智能技术的实际应用。 现在关于提示词的武功秘笈已经多如牛毛&#xff0c;但是我相信这个就像练功一样&#xff0c;练到最后总是化繁为简&#xff0c;一招制胜&#xff01; 今天想说的这…

03python注释与输入函数

Python 注释的作用: 注释可用于解释 Python 代码。 注释可用于提高代码的可读性。 在测试代码时,可以使用注释来阻止执行。 注释可以放在一行的末尾,Python 将忽略该行的其余部分: 实例1 print("Hello, World!") #打印输出Hello,World print(9-3) #输出9…

C++_day6:2024/3/18

作业1&#xff1a;编程题&#xff1a; 以下是一个简单的比喻&#xff0c;将多态概念与生活中的实际情况相联系&#xff1a; 比喻&#xff1a;动物园的讲解员和动物表演 想象一下你去了一家动物园&#xff0c;看到了许多不同种类的动物&#xff0c;如狮子、大象、猴子等。现在…

发挥实力,引领游戏行业的未来——武汉灰京文化的成功之路

作为一家游戏发行商&#xff0c;武汉灰京文化的公司实力源于其强大的战略规划和专业团队。自成立以来&#xff0c;公司坚持以用户为中心&#xff0c;不断提升用户体验。通过深入了解玩家需求&#xff0c;武汉灰京文化在游戏运营和推广过程中&#xff0c;精益求精&#xff0c;力…

使用C#的winform控制数据库实例服务的运行状态

一、得到sqlserver的实例名 二、引用对应的程序集和命名空间 using System.ServiceProcess; C#操作服务要用的类 ServiceController 声明类 private ServiceController serviceController new ServiceController("MSSQLSERVER"); 三、判断服务状态 serviceCon…

Vue.js+SpringBoot开发企业项目合同信息系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 合同审批模块2.3 合同签订模块2.4 合同预警模块2.5 数据可视化模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 合同审批表3.2.2 合同签订表3.2.3 合同预警表 四、系统展示五、核心代码5.1 查询合同…

仿懂车帝的二手车交易平台功能介绍

二手车交易平台app是一款功能丰富的二手车交易平台&#xff0c;以下是其主要功能介绍&#xff1a; 二手车信息展示&#xff1a;APP首页展示各类二手车信息&#xff0c;包括车型、品牌、价格等&#xff0c;用户可以轻松浏览并选择自己感兴趣的车辆。搜索与筛选功能&#xff1a;…

AI智能客服系统的费用

实现智能客服所需的费用取决于多个因素&#xff0c;包括项目的规模、所选择的技术和服务提供商、数据的获取和处理方式等。以下是一些可能影响费用的因素&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作…

微服务day03 -- Docker

1.初识Docker 1.1.什么是Docker 微服务虽然具备各种各样的优势&#xff0c;但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中&#xff0c;依赖的组件非常多&#xff0c;不同组件之间部署时往往会产生一些冲突。 在数百上千台服务中重复部署&#xff0c;环境不一定一致…

Android中Gradle的生命周期详解

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂&#xff0c;风趣幽默"&#xff0c;感觉非常有意思,忍不住分享一下给大家。 &#x1f449;点击跳转到教程 Gradle的生命周期分为三个阶段&#xff1a; 初始化阶段定义阶段(配置阶段)执行阶段 第…

【网络原理】HTTP协议和使用Fiddler抓包

文章目录 &#x1f343;HTTP协议是什么&#xff1f;&#x1f340;理解 "应用层协议"&#x1f38d;HTTP 协议的工作过程&#x1f334;HTTP 协议格式&#x1f333;Fiddler抓包工具的使用&#x1f338;如何抓HTTPS的包&#xff1f; &#x1f38b;抓包工具的原理&#x1…

基于php高校选课系统设计与实现flask-django-python-nodejs

接着&#xff0c;本论文将设计一个基于Web的高校选课系统&#xff0c;并通过详细的需求分析和系统架构设计来解决现有系统中存在的问题。系统的开发将采用目前流行的Web技术和数据库技术&#xff0c;并考虑系统的灵活性、安全性和易用性。最后&#xff0c;本论文将对开发出的系…

jmeter之并发和顺序执行与特殊线程组-第四天

1.jmeter的并发执行 并发执行&#xff1a;多个线程同时执行&#xff0c;不能确定谁先结束 以上案例中http请求里面没有写任何内容&#xff0c;只是为了看这个并发执行的效果 2.jmeter的顺序执行 顺序执行&#xff1a;多个线程顺序执行 再测试计划中勾选“独立运行每个线程组…

【JAVA快速编写UI】 Java 编写一个编码转换和加解密工具,可以创建一个简单的 GUI 应用程序(例子)

EncodingDecodingTool/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── rockmelodies/ │ │ │ └── encodingdecodingtool/ │ │ │ ├── MainApp.java │ │ │ …

shardingsphere-elastic-job-ui 管理界面安装

shardingsphere-elasticjob 从 3.0.0-alpha 版本开始&#xff0c;将console管理界面单独拆分出来 下载前需要 安装 maven 配置环境变量 安装 nodejs 配置环境变量 下载ui源码,安装 官方并未直接提供可执行的二进制文件,需要下载源码编译,目前发行版 3.0.2 https://github.com/…

28-1 文件上传漏洞 - Windows文件流绕过

环境准备:构建完善的安全渗透测试环境:推荐工具、资源和下载链接_渗透测试靶机下载-CSDN博客 一、Windows文件流绕过::SDATA 定义: 文件流(本地文件系统)::$DATA (Windows文件流绕过):利用NTFS交换数据流(ADS),ADS是NTFS磁盘格式的一个特性。在NTFS文件系统下,每个文件都…