数组选择排序

c语言数组选择排序例题,C语言数组排序——冒泡排序、选择排序、插入排序 一、冒泡排序原理解析:(以从小到大排序为例)在一排数字中,将第一个与第二个比较大小,如果后面的数比前面的小,则交换他们的位置。然后比较第二、第三个……直到比较第n-1个和第n个,此时,每一次比较都将较大的一个数往后移动,所以第n个数是所有数中最大的一个。之后再重复以上过程,直到将所有数据按从小到大顺序排列好。编程实现:通过两个嵌套的循环实现。外层循环执行一次,内层循环执行一遍。其中,内层循环控制比... 阅读详情

 

如上数组

选择排序的实现条件就是设置两个指针(次指针不是数据类型的指针而是int类型的值指向数组的下标)两个指针从最左端开始向右遍历,遍历结束一个指针指向该数组最大的值一个指针指向数组最小的值,将最大的值与与数组最右端的数据交换,将最小的值与数组最左端数据交换。

 交换完了之后数组两端之后不再移动忽略两端

 

将剩下的数组循环上述操作

一直到最右端和最左端都是同一个数组元素停止操作

此时数组已完成排序 

这种方式还存在一些bug

那就是当这种情况时

最大的数在最左端max指针不移动,如果将最小的数与最左端的数交换,那么max指向的数值将会发生改变,那么最右端将不会是最大值而是最小值,排序存在BUG。

当出先这种情况时我们需要设立一个特殊情况时的特殊处理。

当,max指向数组最左端时,我们将min指向的值与最右端的值交换,再将最右端的值与最左端的值交换,这样便修复了BUG。

代码实现

​
void swap(int* a, int* b)
{
	int temp = *a;
	*a = *b;
	*b = temp;
}
void SelectSort(int* a, int n)
{
	int left = 0, right = n - 1;
	while (left < right)
	{
		int min = left;
		int max = left;
		for (int i = left; i <= right; i++)
		{
			if (a[i] > a[max])
			{
				max = i;
			}
			else if (a[i] < a[min])
			{
				min = i;
			}
		}
		if (max == left)
		{
			swap(&a[min], &a[right]);
			swap(&a[left], &a[right]);
		}
		else
		{
			swap(&a[min], &a[left]);
			swap(&a[max], &a[right]);
		}
		left++;
		right--;
	}
}

使用选择法将数组中的整数按由小到大排序 (10分) 编写选择法排序函数,使用选择法将数组中的整数按由大到小排序 使用选择法将数组中的整数按由小到大排序 (10分) 编写选择法排序函数,使用选择法将数组中的整数按由大到小排序。 输入格式: 从键盘上给大小为10个元素的整型数组随意赋值。 输出格式: 在一行中按从大到小顺序输出10个整数(每个整数按5列宽度输出)。 输入样例: 5 28 67 0 2 7 -6 5 36 -10 输出样例: 67 36 28 7 5 2 0... 阅读详情

相关推荐

从轻量化到高精度:3DXML 转 STP 的工程数据升级技术指南

本文详细解析了3DXML转STP格式的工程数据升级技术,对比了两种格式在轻量化和高精度方面的特性差异,并提供了CATIA、FreeCAD及Python编程等多种专业级转换方案。通过实际案例展示了如何确保转换过程中的数据精度,适用于CAD设计、精密制造等场景,帮助工程师实现工程数据的高效升级。

weixin_29201859的博客 215

Java数组(冒泡排序,选择排序)

数组,冒泡排序,杨辉三角

2301_78341216的博客 2347

stm32H743基于CubeMX配置为双ADC多通道DMA规则采样

stm32H743的ADC支持的最大频率为36MHz,有相关资料上说是可以超频,具体技术细节不多讨论。 需求: 使用stm32H743的ADC采集5路ovrc

xtqbp的博客 4364

Java数组选择排序法

开发工具与关键技术: MyEclipse Java 撰写时间:2020、12、4 排序,顾名思义就是根据自己的需求按照从大到小或从小到大等方式进行排序,排序因需求不同而排序的方式也千变万化,所以排序的方法也有很多种,比如上次说过的冒泡排序,还有这里说的选择排序,以及其他的排序方法等。 选择排序是算法排序中比较常见的一种数组排序方法,上次说过的冒泡排序,冒泡排序的方式是通过定位交换从大到小进行逐个依次交换来排序,他跟选择排序法是有一定的区别的。 首先我说一下选择排序的原理大概是:通过遍历数组中的元素,从中

weixin_44551879的博客 748

ros1 Noetic下运行cartographer算法进行2d建图

最近的工作重点放在机器狗的二次开发上,项目的需求是要升级机器狗的slam算法和导航避障算法,slam拟采用激光与视觉融合算法,激光slam就使用最为流行和实用的cartoghper算法。在这过程中遇到好多坑,希望看到这篇博客的人能少走弯路吧。我用的仿真机器人是wpr_simiulation。首先复制一份demo_revo_lds.launch文件和revo_lds.lua文件,修改成下面的样子。my_test.lua文件,base_link就是机器人的坐标系。下载与安装的博客有很多,我推荐。

sun5739的博客 1550

uniapp - 最新详细实现web-view网页与安卓苹果App端之间互相通信功能,苹果app/安卓app平台与内嵌webview组件内的网页进行相互传值,内置网页与app双向实时通信,详细示例代码

uni-app,Android安卓,苹果ios,app,内嵌webview,第三方H5网页,app和web-view通信传值,web-view引入的页面向App主应用传递数据,App端与webview端相互通信,App端和H5端webview之间的通信,uniapp实现webview和APP之间的传值通信,如何互相传递对象数据,数据传递了接收不到,web-view页面向app内发送消息,监听传递的参数,uni-app和web-view页面相互传参,报错怎么办,跨域,屏幕空白出错,数据交互,解决手机物理返回按

🏆 前端领域优质创作者 4742

数组排序(冒泡排序、选择排序)

冒泡排序和选择排序是两种常见的排序算法。冒泡排序通过多次相邻元素的比较和交换来排序,而选择排序通过多次选取最小值或最大值并放置到正确位置来排序。尽管这两种排序算法的时间复杂度均为O(n^2),但选择排序通常比冒泡排序更高效。通过理解这两种排序算法的思想和实现,我们可以更好地处理数组排序的问题,并在实际开发中选择合适的排序算法。希望本文能帮助你更好地理解冒泡排序和选择排序的原理和实现方法。

一名热爱编程和分享技术的开发者,我正在不断探索Java编程的各种奥妙,并乐于将我的学习心得分享给大家。 2963

基于深度学习的人脸识别考勤管理系统,采用YOLOv11和Dlib算法实现人脸识别和考勤签到,前台人脸识别和签到系统 + 后台人脸和考勤管理系统,全网独发

基于深度学习的口罩人脸识别的考勤管理系统,采用YOLOv11和Dlib算法实现人脸识别和考勤签到,前台人脸识别和签到系统 + 后台人脸和考勤管理系统,全网独发

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1829

c语言——指针数组_选择排序

c语言——指针数组_选择排序 所谓选择排序,就是每次找到未排序中最小的(最大的也行)元素的位置,找到后与该位置与未排序序列的第一个元素交换值,直到该序列成为有序序列。初始状态整个序列为无序序列,每次交换都使有序序列的长度加一,无序序列的起始位置后移一位。选择排序的平均时间复杂度为O(n^2),且选择排序相对不稳定。 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<stdl

mirana的专栏 3507

MinerU 系列教程 | 第二课:快速上手 -- 安装与第一次解析

本篇教程作为的第二课,将带你从零完成 MinerU 的环境搭建、模型下载,并成功运行第一次文档解析。上一课我们从宏观视角认识了 MinerU,本课开始正式动手实践。

weixin_43674738的博客 304

i茅台最新任务python脚本

从固定的 `header_context` 生成HTTP请求头,并加入用户的`userId`、`MT-Token`等动态信息,以模仿真实的请求。- 发送预约请求,提交商品和门店的参数,如 `sessionId`、`shopId`、`itemId` 等。- 定时任务:通过 `cron` 表达式 `0 0 9/21 * * *`,表示每月的9日和21日的0点执行。- `login`:使用验证码进行登录,并返回 `token` 和 `userId`。- 获取北京时间当天0点的时间戳,作为预约请求的时间参数。

三维点云技术探索 988

选择排序法实现数组排序

import java.util.*; public class Sort { public static void main(String[] args) { Scanner sc = new Scanner(System.in); // 动态创建数组 int[] arr = new int[sc.nextInt()]; for (int i = 0; i < arr.l...

weixin_45654215的博客 807

倍福EL6002做RS232通信获取称重数据..

本文介绍EL6002模块通过RS232自由口通信协议获取从站数据。具体数据对照说明手册即可。

weixin_41883890的博客 1012

Java中数组的冒泡排序、选择排序、快速排序

Java中数组的冒泡排序以及选择排序一、代码及效果图1.冒泡排序2.选择排序总结 一、代码及效果图 1.冒泡排序 代码如下(示例): public class Hello1 { public static void main(String[] args) { int arr[]={9,4,5,6,8,1,40}; for (int i = 1; i <=arr.length-1; i++) { for (int j = 0; j <

StruggleBamboo的博客 4397

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

数组 选择排序 c语言

解法一: #include <stdio.h> #define NUM 10 int main() { int a[NUM],i,j,k,t; printf("请输入%d个数",NUM); for(i=0;i<NUM;i++) scanf("%d",&a[i]); for(i=0;i<NUM-1;i++){ ...

bianchengdacainiao的博客 3878

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

数组的选择排序

数组的选择排序 含义:是按照一定的规律把数组从小到大或者是从大到小的顺序帮我们排序好的一种方法,它也是计算机算法的一种。 //准备一个乱序的数组 var arr = [2,4,8,6,1,3,5,7]; ...

GSjesson的博客 1628

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

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

二维数组选择排序

如何对二维数组进行选择排序(先对行后对列) #include<stdio.h> int main() { int n,m; scanf("%d %d",&n,&m); int a[n][m],j,i,k,f,temp,p; for(i=0;i<n;i++)//输入二维数组 for(j=0;j<m;j++) scanf("%d",&a[i][j]); for(i=0;i<n;i++)//对行

weixin_60247406的博客 1607

用选择法对数组中10个整数按由小到大排序

在执行 select_sort 函数中的for循环时,当i为0时,将array[0]与array[1]-array[9]比较,只要发现某一个数组元素array[j]的值大于array[0],就将它的下标j存放在变量k中,执行完内循环(j循环)后,k中存放的是array[1]-array[9]中最大数的下标,然后将该元素与array[0]对换。因此用数组名作函数实参时,不是把实参数组各元素的值传递给形参,而只是将实参数组首元素的地址传递给形参。形参可以是数组名,也可以是指针变量,它们用来接收实参传来的地址。

2301_80138271的博客 1381

数组排序(选择排序)

1 数组排序 排序是对数组施加的最常用的算法; 所谓排序,是指将数组元素按照从小到大或从大到小的顺序重新排列; 对于元素较多的数组,排序算法的优劣至关重要; 一般情况下,通过排序过程中数组元素的交换次数来衡量排序算法的优劣; 常用的排序算法有:插入排序、冒泡排序、选择排序等。 2 选择排序 2.1 选择排序原理 (1)将数组中除第一个的其他后位元素陆续与第一个元素比较,如果该元素小于第一个元素,则对这两个元素进行交换 循环上述规则,直至找出最小元素,放于数组中第一个位置(即索引0处) (2)将数组中除

qq_44980917的博客 2755

java数组的选择排序_数组的选择排序

选择排序:是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。原理:首先用第一个元素和后面的每一个元素进行比较,如果后面有比第一个元素小的就交换这两个元素比较下来会得到第最小的一个元素,放在第一个位置,然后依次拿着后面每一个元素依次这样比较,每次都会得到一个最小的元素,排序完就是从小到大排序例如:int[] arr={31,23,79,65...

weixin_39601088的博客 324

实现一个选择排序程序,排序整型数组

实现一个选择排序程序,排序整型数组。        首先明白什么是选择排序,选择排序是指,每一次在待排序数列中,选择一个最大的(或最小的)放到数列的最前端,然后再用这种方法排列后面的数列。       下面用选择排序实现从小到大排序,程序代码如下: #include #include #include void show(int arr[], int length) //打印数组函

ValDC_Morning的博客 1268

Java_数组的选择排序

1 class ArrayOperateDemo1 2 { 3 /* 4 定义一个功能,为了遍历数组中的元素 5 */ 6 public static void printArray(int[] arr) 7 { 8 for (int x=0;x<arr.length ;x++ ) 9 ...

162

使用选择排序法对数组进行排序

int[]array=newint[10]; //生成随机数对象 Randomrandom=newRandom(); for(inti=0;i<array.length;i++){ array[i]=random.nextInt(50); System.out.print(array[i]+""); }...

weixin_33860553的博客 3073

数组及数组冒泡排序,直接选择排序,反转排序

数组一.数组1.数组定义的方法2.获取数组长度3.获取数据列表4.读取下标赋值5.数组遍历6.数组切片7.数组替换8.数组删除9.数组元素追加二.向函数传数组参数三. 数组排序法1.冒泡排序2.直接选择排序3.反转排序 一.数组 1.数组定义的方法 方法一: 数组名=(value0 vlaue1 value2 … ) 方法二: 数组名=([0]=value [1]value [2]value … ) 方法三: 列表名="value0 value1 value2 … " 数组名=($列表名) 方法四:

kele_baba 276

选择排序法对数组进行排序

package selectionSort; import java.util.Arrays; public class Exam { //使用选择排序法对数组进行排序 public static void main(String[] args) { int[] nums= {23,3453,123,54,12,45,145,135,656,...

398

数组排序之选择排序

选择排序: 将第一位依次与后面的元素相比较,得到最小值,与第一位交换。再用第二位依次与后面元素相比较,得到最小值,与第二位交换。 从原始数据中找到最小元素,并放在数组的最前面。然后再从下面的元素中找到最小元素,放在之前最小元素的后面,直到排序完成。 vararr=[5,99,2,9,1,5,67,7,10,23] fo...

bachou1292的博客 307
上一篇: 取一个文件中最大的k个值(运行内存有限)
下一篇: 数组插入排序和希尔排序
Arcane Code
博客等级 码龄3年 598粉丝 101原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值