C语言程序设计十大排序—选择排序
文章目录
- 1.概念✅
- 2.选择排序🎈
- 3.代码实现✅
- 3.1 直接写✨
- 3.2 函数✨
- 4.总结✅
- 5.十大排序
1.概念✅
排序是数据处理的基本操作之一,每次算法竞赛都很多题目用到排序。排序算法是计算机科学中基础且常用的算法,排序后的数据更易于处理和查找。在计算机发展的历程中,在排序算法的研究一直深受人们重视,出现了很多算法,在思路、效率、应用等方面各有特色。通过学习排序算法,读者可以理解不同算法的优势和局限性,并根据具体情况选择最合适的算法,以提高程序的性能和效率。学习排序算法还有助于培养逻辑思维和问题解决能力,在解决其他类型的问题时也能够应用到类似的思维方法。
2.选择排序🎈
选择排序(Selection Sort)是最简单、直观的排序算法,虽然效率不高,但是利于理解和实现。
排序的目的是什么?例如对n个数从小到大排序,就是把杂乱无序的n个数放到它们应该放的位置上。
最直接的做法是找到最小数,放在第1个位置,找到第2个小的数,放在第2个位置,......,找到第n个数,放在第n个位置。
这个思路就是排序,具体操作描述如下:
(1)第一轮,在n个数中找到最小数,然后与第1个位置的数交换,这样就把最小数放到了第一位置,如下图所示:
(2)第二轮,在第2~n个数中找到最小值,然后与第2个位置的数交换,这样就把地2小的数放到了第2个位置,如下图所示:
(3)第三轮,在第3~n个数中找到最小的数…
一共执行n-1轮操作,第i轮找到第i小的数,放到第i个位置,就排好序了。
3.代码实现✅
3.1 直接写✨
#include "stdio.h"
int main(){int a[10]={5,1,6,9,7,0,-5,10,95,63};int i,j,t,min;for(i=0;i<=9;i++)for(j=i+1;j<10;j++) if(a[i]>=a[j]){t=a[i];a[i]=a[j];a[j]=t;}printf("排序后的顺序:");for(i=0;i<10;i++) printf("%d ",a[i]);
}
3.2 函数✨
#include <stdio.h>void selectionSort(int arr[], int n) {int i, j, minIndex, temp;// 外层循环遍历每一位for (i = 0; i < n - 1; i++) {minIndex = i; // 假设当前元素为最小值的索引// 内层循环找出当前未排序部分中的最小值for (j = i + 1; j < n; j++) {if (arr[j] < arr[minIndex]) {minIndex = j; // 更新最小值索引}}// 如果发现更小的值,交换位置if (minIndex != i) {temp = arr[i];arr[i] = arr[minIndex];arr[minIndex] = temp;}}
}void printArray(int arr[], int n) {int i ;for (i = 0; i < n; i++) {printf("%d ", arr[i]);}printf("\n");
}int main() {int arr[] = {5,1,6,9,7,0,-5,10,95,63}; // 原始数组int n = sizeof(arr) / sizeof(arr[0]); // 数组大小selectionSort(arr, n); // 调用选择排序函数printf("排序后的数组: \n");printArray(arr, n); // 打印排序后的数组return 0;
}
4.总结✅
选择排序算法的计算量是多少?找最小的数需要比较n-1次,找第2小的数需要比较n-2次,......,一共需要比较n^2/2次,把它的计算复杂度记为O(n^2)。直接看代码也能得到这个结论:有两重for循环,分别循环n次,共循环O(n^2)次。
将上述代码提交到判题系统,只能通过20%的测试。判题系统一般给一秒的执行时间,计算机一秒约能计算一亿次。本题20%的数据,有n<=10^3,能在一秒内完成。若n=10^5,选择排序需要的计算n^2=100亿次,超时。
选择排序是一种“死脑筋”的算法,它与数据列的特征无关,不管原数据列是不是有序,都得计算O(n^2)次,上一个“冒泡算法”就聪明得多,如果第一能找到最大数发现数列已经有序,就停止不再做排序计算。
选择排序虽然低效,但也有优点:(1)简单、易写;(2)不占用额外的空间,排序就在原理的序列上操作。
5.十大排序
1.冒泡排序
相关文章:

C语言程序设计十大排序—选择排序
文章目录 1.概念✅2.选择排序🎈3.代码实现✅3.1 直接写✨3.2 函数✨ 4.总结✅5.十大排序 1.概念✅ 排序是数据处理的基本操作之一,每次算法竞赛都很多题目用到排序。排序算法是计算机科学中基础且常用的算法,排序后的数据更易于处理和查找。在…...

C语言初阶牛客网刷题——HJ73 计算日期到天数转换【难度:简单】
1. 题目描述——HJ73 计算日期到天数转换 牛客网OJ题链接 描述 每一年中都有 12 个月份。其中,1,3,5,7,8,10,12 月每个月有 31 天; 4,6,9,11 月每个月有 30 天;而对于 2 月,闰年时有29 天,平年时有 28 天。 现在&am…...

MATLAB中alphanumericsPattern函数用法
目录 语法 说明 示例 从文本中提取字母和数字 匹配所设置数目的字母和数字 匹配不同大小的字母和数字集合 alphanumericsPattern函数的功能是匹配字母和数字字符。 语法 pat alphanumericsPattern pat alphanumericsPattern(N) pat alphanumericsPattern(minCharact…...

人工智能在教育领域的创新应用与前景展望
人工智能在教育领域的创新应用与前景展望 摘要:本文围绕人工智能在教育领域的应用展开深入探讨,分析了人工智能为教育带来的创新变革,如个性化学习支持、智能教学辅助、教育资源优化等方面的显著成效,同时探讨了其在应用过程中面…...

约束布局 ConstraintLayout
鸿蒙操作系统(HarmonyOS)是华为公司自主研发的面向全场景的分布式操作系统,旨在为用户提供流畅、安全、可靠的智能生活体验。随着鸿蒙操作系统的不断发展和完善,越来越多的开发者开始关注并投入到鸿蒙应用开发中来。对于想要深入理…...

校园商铺管理系统设计与实现(代码+数据库+LW)
摘 要 信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自…...

react native在windows环境搭建并使用脚手架新建工程
截止到2024-1-11,使用的主要软件的版本如下: 软件实体版本react-native0.77.0react18.3.1react-native-community/cli15.0.1Android Studio2022.3.1 Patch3Android SDKAndroid SDK Platform 34 35Android SDKAndroid SDK Tools 34 35Android SDKIntel x…...

vulnhub DC-1靶机 walkthrough
描述 DC-1 是专门为获得渗透测试经验而建造的易受攻击实验室。 它旨在成为初学者的挑战,但其难易程度取决于您的技能和知识以及学习能力。 要成功完成此挑战,您需要具备 Linux 技能、熟悉 Linux 命令行以及使用基本渗透测试工具的经验,例如 …...

计算机网络 (58)无线局域网WLAN
前言 无线局域网WLAN(Wireless Local Area Network)是一种利用无线通信技术将计算机设备互联起来,构成可以互相通信和实现资源共享的网络体系。 一、定义与特点 定义: WLAN通过无线信道代替有线传输介质连接两个或多个设备形成一个…...

基于物联网的风机故障检测装置的设计与实现
1 系统总体设计方案 通过对风机故障检测装置的设计与实现的需求、可行性进行分析,本设计风机故障检测装置的设计与实现的系统总体架构设计如图2-1所示,系统风机故障检测装置采用STM32F103单片机作为控制器,并通过DS18B20温度传感器、ACS712电…...

【AI日记】25.01.25
【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】【读书与思考】 AI kaggle 比赛:Forecasting Sticker Sales 读书 书名:法治的细节 律己 AI:8 小时,良作息:00:30-8:30, 良短视频&…...

Sourcetree:一款高效便捷的Git版本控制客户端
Sourcetree:一款高效便捷的Git版本控制客户端 引言 在软件开发领域,版本控制是确保代码质量和项目进度的关键工具。Git作为当前最流行的版本控制系统,已经广泛应用于各类项目中。而Sourcetree作为Git的图形化界面客户端,凭借其易…...

图像处理算法研究的程序框架
目录 1 程序框架简介 2 C#图像读取、显示、保存模块 3 C动态库图像算法模块 4 C#调用C动态库 5 演示Demo 5.1 开发环境 5.2 功能介绍 5.3 下载地址 参考 1 程序框架简介 一个图像处理算法研究的常用程序逻辑框架,如下图所示 在该框架中,将图像处…...

GitLab配置免密登录和常用命令
SSH 免密登录 Windows免密登录 删除现有Key 访问目录:C:\Users\Administrator\ .ssh,删除公钥:id_rsa.pub ,私钥:id_rsa 2.生成.ssh 秘钥 运行命令生成.ssh 秘钥目录( ssh-keygen -t rsa -C xxxxxx126.…...

Chameleon(变色龙) 跨平台编译C文件,并一次性生成多个平台的可执行文件
地址:https://github.com/MartinxMax/Chameleon Chameleon 跨平台编译C文件,并一次性生成多个平台的可执行文件。可以通过编译Chameleon自带的.C文件反向Shell生成不同平台攻击载荷。 登录 & 代理设置 按照以下步骤设置 Docker 的代理: 创建配置目…...

第十四讲 JDBC数据库
1. 什么是JDBC JDBC(Java Database Connectivity,Java数据库连接),它是一套用于执行SQL语句的Java API。应用程序可通过这套API连接到关系型数据库,并使用SQL语句来完成对数据库中数据的查询、新增、更新和删除等操作…...

“AI教学实训系统:打造未来教育的超级引擎
嘿,各位教育界的伙伴们,今天我要跟你们聊聊一个绝对能让你们眼前一亮的教学神器——AI教学实训系统。作为资深产品经理,我可是亲眼见证了这款系统如何颠覆传统教学,成为未来教育的超级引擎。 一、什么是AI教学实训系统?…...

java读取设置pdf属性信息
pom <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.24</version> </dependency>读取属性 import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmod…...

C语言内存管理详解
C语言不像其他高级语言那样提供自动内存管理,它要求程序员手动进行内存的分配和释放。在C语言中,动态内存的管理主要依赖于 malloc、calloc、realloc 和 free 等函数。理解这些函数的用法、内存泄漏的原因及其防止方法,对于编写高效、可靠的C…...

mysql从全备文件中提取单库或单表进行恢复——筑梦之路
前提条件 与业务确认涉及业务、数据库IP、数据误删除时间点、数据删除涉及的SCHEMA、数据表,确认该数据库为MySQLdump备份方式,备份策略为每日凌晨1点进行数据库全备份,备份保留7天,业务误删除数据时间点为当日10点左右࿰…...

HTML-新浪新闻-实现标题-排版
标题排版 图片标签:<img> src:指定图片的url(绝对路径/相对路径) width:图片的宽度(像素/相对于父元素的百分比) heigth:图片的高度(像素/相对于父元素的百分比&a…...

【前沿聚焦】机器学习的未来版图:从自动化到隐私保护的技术突破
网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…...

二叉树的最大深度(C语言详解版)
一、摘要 嗨喽呀大家,leetcode每日一题又和大家见面啦,今天要讲的是104.二叉树的最大深度,思路互相学习,有什么不足的地方欢迎指正!好啦让我们开始吧!!! 二、题目简介 给定一个二…...

基于dlib/face recognition人脸识别推拉流实现
目录 一.环境搭建 二.推拉流代码 三.人脸检测推拉流 一.环境搭建 1.下载RTSP服务器MediaMTX与FFmpeg FFmpeg是一款功能强大的开源多媒体处理工具,而MediaMTX则是一个轻量级的流媒体服务器。两者结合,可以实现将本地视频或者实时摄像头画面推送到RTSP流,从而实现视频…...

【kong gateway】5分钟快速上手kong gateway
kong gateway的请求响应示意图 安装 下载对应的docker 镜像 可以直接使用docker pull命令拉取,也可以从以下地址下载:kong gateway 3.9.0.0 docker 镜像 https://download.csdn.net/download/zhangshenglu1/90307400, postgres-13.tar http…...

webrtc入门系列(五)amazon-kinesis-video-streams-webrtc-sdk-c编译
《webrtc入门系列(一)easy_webrtc_server 入门环境搭建》 《webrtc入门系列(二)easy_webrtc_server 入门example测试》 《webrtc入门系列(三)云服务器coturn环境搭建》 《webrtc入门系列(四&…...

通过亚马逊云科技Bedrock打造自定义AI智能体Agent(上)
大家对于智能体代理Agent一定已经非常熟悉,自主代理(Autonomous Agents) 目前在AI行业极其热门并具有巨大的潜力,能够显著提升开发者日常的工作效率、自动化日常琐碎、重复性任务,并生成全新的内容。Agent可以理解用户…...

【Nacos】负载均衡
目录 前言 一、服务下线二、权重配置三、同一个集群优先访问四、环境隔离 前言 我们的生产环境相对是比较恶劣的,我们需要对服务的流量进行更加精细的控制.Nacos支持多种负载均衡策略,包括配置权重,同机房,同地域,同环…...

小智 AI 聊天机器人
小智 AI 聊天机器人 (XiaoZhi AI Chatbot) 👉参考源项目复现 👉 ESP32SenseVoiceQwen72B打造你的AI聊天伴侣!【bilibili】 👉 手工打造你的 AI 女友,新手入门教程【bilibili】 项目目的 本…...

HTML一般标签和自闭合标签介绍
在HTML中,标签用于定义网页内容的结构和样式。标签通常分为两类:一般标签(也称为成对标签或开放闭合标签)和自闭合标签(也称为空标签或自结束标签)。 以下是这两类标签的详细说明: 一、一般标…...