当前位置: 首页 > news >正文

C语言实现选择排序

什么是选择排序?

选择排序是一种简单直观的排序算法,它的核心思想是每次从未排序的元素中选择最小(或最大)的元素,然后将其放到已排序序列的末尾。通过重复这个过程,直到所有元素都排好序为止。

选择排序的详细步骤

1、首先,从待排序的数组中找到最小(或最大)的元素,记为最小元素。
2、将最小元素与数组的第一个元素进行交换,将最小元素放到已排序序列的末尾。
3、接下来,在剩余的未排序元素中,再次寻找最小(或最大)的元素,重复步骤2。
4、重复执行上述步骤,直到所有元素都排好序。

举例说明

假设我们有以下待排序的数组:[5, 2, 9, 1, 5, 6]。

第一轮: 在数组中找到最小的元素,这是1。然后将1与数组的第一个元素(即5)交换位置。数组变为:[1, 2, 9, 5, 5, 6]。

第二轮: 在未排序的部分中([2, 9, 5, 5, 6])找到最小元素,这是2。将2与未排序部分的第一个元素(即2)交换位置。数组保持不变,为:[1, 2, 9, 5, 5, 6]。

第三轮: 在未排序的部分中([9, 5, 5, 6])找到最小元素,这是5。将5与未排序部分的第一个元素(即9)交换位置。数组变为:[1, 2, 5, 9, 5, 6]。

第四轮: 在未排序的部分中([9, 5, 6])找到最小元素,这是5。将5与未排序部分的第一个元素(即9)交换位置。数组变为:[1, 2, 5, 5, 9, 6]。

第五轮: 在未排序的部分中([9, 6])找到最小元素,这是6。将6与未排序部分的第一个元素(即9)交换位置。数组变为:[1, 2, 5, 5, 6, 9]。

最终,整个数组变得有序:[1, 2, 5, 5, 6, 9]。

关键

选择排序的关键点是每一轮内层循环都找到了当前范围内的最小(或最大)元素,并将其放到已排序序列的末尾。通过不断缩小排序范围,每次排序都能找到最小(或最大)的元素,并逐步构建有序序列。

示例代码

#include <stdio.h>void ChoiceSort(int arr[], int length);int main()
{int arr[] = {5, 2, 9, 1, 5, 6};/*不可以放在函数内部, 当数组作为函数参数传递给函数时,数组参数会被转换为指针类型,因此在函数内部无法通过sizeof操作符获取数组的长度。*/int length = sizeof(arr) / sizeof(arr[0]);ChoiceSort(arr, length);return 0;
}void ChoiceSort(int arr[], int length)
{int i, j, k;for (i = 0; i < length; i++){int minIndex = i; // 最小数的下标,每个循环开始总是假设第一个数最小 for (j = i + 1; j < length; j++){if (arr[j] < arr[minIndex]) // 找到最小的数 {minIndex = j; // 保存最小数的索引 }}printf("第%d轮最小数为:%d\n",i+1,arr[minIndex]);int temp = arr[minIndex];arr[minIndex] = arr[i];arr[i] = temp;for (k = 0; k < length; k++){printf("%d ", arr[k]);}printf("\n======================\n"); }
}

运行截图

相关文章:

C语言实现选择排序

什么是选择排序&#xff1f; 选择排序是一种简单直观的排序算法&#xff0c;它的核心思想是每次从未排序的元素中选择最小&#xff08;或最大&#xff09;的元素&#xff0c;然后将其放到已排序序列的末尾。通过重复这个过程&#xff0c;直到所有元素都排好序为止。 选择排序…...

unable to write symref for HEAD: Permission denied

今天从gitee上面克隆项目到本地时报错如下 warning: unable to unlink ‘D:/IDEAcode/ruiji1.0/.git/HEAD.lock’: Invalid argument error: unable to write symref for HEAD: Permission denied 解决方法&#xff1a;将要存放项目的文件夹权限修改为完全控制 原先权限&…...

长时间序列遥感数据处理及在全球变化、物候提取、植被变绿与固碳分析、生物量估算与趋势分析等领域中的实践技术应用

植被是陆地生态系统中最重要的组分之一&#xff0c;也是对气候变化最敏感的组分&#xff0c;其在全球变化过程中起着重要作用&#xff0c;能够指示自然环境中的大气、水、土壤等成分的变化&#xff0c;其年际和季节性变化可以作为地球气候变化的重要指标。此外&#xff0c;由于…...

【行为型设计模式】C#设计模式之策略模式

题目&#xff1a;假设你正在开发一个手机应用程序&#xff0c;该应用程序包含一个计算器功能。用户可以根据自己的需求选择不同的计算策略进行计算&#xff0c;例如加法、减法、乘法或除法。请使用策略模式设计该计算器功能&#xff0c;使得用户可以根据自己的选择进行相应的计…...

Linux Shell 编程入门

从程序员的角度来看&#xff0c; Shell本身是一种用C语言编写的程序&#xff0c;从用户的角度来看&#xff0c;Shell是用户与Linux操作系统沟通的桥梁。用户既可以输入命令执行&#xff0c;又可以利用 Shell脚本编程&#xff0c;完成更加复杂的操作。在Linux GUI日益完善的今天…...

Webstorm + Egg.js 进行断点调试

Webstorm Egg.js 进行断点调试 1、在工具栏找到编辑配置&#xff0c;创建已运行Node.js 应用程序的调试配置 2、debug调试配置 3、调试 4、查看断点是否起效...

Oracle-创建PDB

Oracle-创建PDB 创建PDB的方式 从PDB$SEED新建PDB克隆已存在的PDB 本地PDB克隆到同一个CDB中将远程PDB克隆到CDB中将非CDB插入或克隆到CDB中通过插拔的方式创建PDB sql 命令语法 条件 CDB必须open并且read write模式连接CDB$ROOT 用户并且具有CREATEPLUGGABLEDATABASE系统权…...

【TypeScript】交叉类型联合类型(四)

【TypeScript】交叉类型&联合类型&#xff08;四&#xff09; 【TypeScript】交叉类型&联合类型&#xff08;四&#xff09;一、简介二、交叉类型2.1 交叉类型使用的注意点2.2 基本数据类型交叉2.3 对象类型交叉 三、联合类型四、类型缩减 一、简介 TypeScript 中的交…...

数组和字符串-字符串

最长公共前缀 题意&#xff1a; 给多个字符串&#xff0c;找最长前缀 解&#xff1a; 暴力匹配&#xff0c;先按字典序排序字符串&#xff0c;这样长度短的优先进行匹配&#xff0c;所得字符串就可能偏小 适合a aa aaa aaaa这样的数据&#xff0c;不过对于aa aab aabc aab…...

MySQL-索引基础

文章概要 本篇文章通过几个问题来了解MySQL中索引相关的概念。平时在学习MySQL时或多或少都听说过索引的概念&#xff0c;但是索引到底是个什么东西&#xff0c;可能还不是非常的清楚。 正文 1. 什么是索引&#xff1f; 索引&#xff0c;在MySQL中也称为键(key)&#xff0c…...

CentOS中自动加载802.1q模块

CentOS中自动加载802.1q模块 要想在CentOS中自动加载内核模块&#xff0c;需要在/etc/sysconfig/modules/目录中增加一个脚本&#xff0c;在此脚本中加载所需的模块。 下面是我所用的一个名为8021q.modules的脚本&#xff0c;用来在我的CentOS 5.3中自动加载802.1Q模块&#…...

CSP-J2022第一轮试题

...

使用Java根据表名导出与导入Sql

前言 很粗糙啊&#xff0c;有很多可以优化的地方&#xff0c;而且也不安全&#xff0c;但是临时用还是OK的&#xff0c;我这个是公司里面的单机软件&#xff0c;不联网。 嗨&#xff01;我是一名社交媒体增长黑客&#xff0c;很高兴能帮助您优化和丰富关于批量作业导出和导入…...

Elasticsearch同时使用should和must

问题及解决方法 must和should组合查询&#xff0c;should失效。使用must嵌套查询&#xff0c;将should组成的bool查询包含在其中一个must查询中。 SearchRequest request new SearchRequest(); request.indices("function_log");SearchSourceBuilder sourceBuilde…...

羽毛球热身和拉伸

1、绕场地慢跑 2、拉伸练习 拉伸动作主要有腕踝关节热身、下蹲、弓箭步压腿、后蹲压腿、腹背 具体动作可自行搜索练习 3、挥拍练习 杀球上网挥拍练习 正手挑球练习、反手挑球练习 4、拉伸 脚踝&#xff1a;一脚支持&#xff0c;另一脚拇指撑地正反向来回几圈转动脚踝&#…...

使用 Vue 实现页面访问拦截

使用 Vue 实现页面访问拦截 在现代的 Web 应用程序中&#xff0c;页面访问拦截是非常重要的一个方面。它可以用于确保用户只能访问他们有权限的页面&#xff0c;提高应用程序的安全性和用户体验。本篇博文将介绍如何使用 Vue 框架来实现页面访问拦截的功能。 文章目录 使用 Vu…...

使用webpack建立React+TS项目

之前写过类似的文章&#xff0c;这次看到一本新书里也介绍了这个知识点&#xff0c;故尝试之。 Refer: 《Learn React With TypeScript - A Beginners Guide To Reactive Web Development With React 18 and TypeScript》chapter3 Creating a project with webpack 1.先建立一…...

法律监督大数据平台有什么作用?

大数据赋能时代法律监督&#xff0c;构建法律行业领域大数据监督模型。法律监督大数据研判系统助力检察机关以社会公正为核心价值追求&#xff0c;对执法不严、司法不公“零容忍”&#xff0c;强化对诉讼活动的法律监督&#xff0c;坚决维护法律尊严&#xff0c;坚决捍卫公平正…...

根据制定的长度切割list值

88、根据制定的长度切割list值 依赖&#xff0c;谷歌开源的工具类库&#xff0c;非常的强大 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>29.0-jre</version> </dependency>其…...

AES加密(1):AES基础知识和计算过程

从产品代码的安全角度考虑&#xff0c;我们需要对代码、数据进行加密。加密的算法有很多种&#xff0c;基于速度考虑&#xff0c;我们一般使用对称加密算法&#xff0c;其中有一种常见的对称加密算法&#xff1a;AES(Advanced Encryption Standard)。在一些高端的MCU&#xff0…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用

中达瑞和自2005年成立以来&#xff0c;一直在光谱成像领域深度钻研和发展&#xff0c;始终致力于研发高性能、高可靠性的光谱成像相机&#xff0c;为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...

Vue 3 + WebSocket 实战:公司通知实时推送功能详解

&#x1f4e2; Vue 3 WebSocket 实战&#xff1a;公司通知实时推送功能详解 &#x1f4cc; 收藏 点赞 关注&#xff0c;项目中要用到推送功能时就不怕找不到了&#xff01; 实时通知是企业系统中常见的功能&#xff0c;比如&#xff1a;管理员发布通知后&#xff0c;所有用户…...

PH热榜 | 2025-06-08

1. Thiings 标语&#xff1a;一套超过1900个免费AI生成的3D图标集合 介绍&#xff1a;Thiings是一个不断扩展的免费AI生成3D图标库&#xff0c;目前已有超过1900个图标。你可以按照主题浏览&#xff0c;生成自己的图标&#xff0c;或者下载整个图标集。所有图标都可以在个人或…...

大模型——基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程

基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程 下载安装Docker Docker官网:https://www.docker.com/ 自定义Docker安装路径 Docker默认安装在C盘,大小大概2.9G,做这行最忌讳的就是安装软件全装C盘,所以我调整了下安装路径。 新建安装目录:E:\MyS…...

Python的__call__ 方法

在 Python 中&#xff0c;__call__ 是一个特殊的魔术方法&#xff08;magic method&#xff09;&#xff0c;它允许一个类的实例像函数一样被调用。当你在一个对象后面加上 () 并执行时&#xff08;例如 obj()&#xff09;&#xff0c;Python 会自动调用该对象的 __call__ 方法…...

LUA+Reids实现库存秒杀预扣减 记录流水 以及自己的思考

目录 lua脚本 记录流水 记录流水的作用 流水什么时候删除 我们在做库存扣减的时候&#xff0c;显示基于Lua脚本和Redis实现的预扣减 这样可以在秒杀扣减的时候保证操作的原子性和高效性 lua脚本 // ... 已有代码 ...Overridepublic InventoryResponse decrease(Inventor…...

基于Java项目的Karate API测试

Karate 实现了可以只编写Feature 文件进行测试,但是对于熟悉Java语言的开发或是测试人员,可以通过编程方式集成 Karate 丰富的自动化和数据断言功能。 本篇快速介绍在Java Maven项目中编写和运行测试的示例。 创建Maven项目 最简单的创建项目的方式就是创建一个目录,里面…...