【C语言】选择排序

基本原理

先找到数组中最大的那个数,将最大的数放到数组最右端(交换a[maxid]和a[len-1]这两个数的位置),然后继续从a[0]到a[len-2]中找到最大的数,然后交换a[maxid]和a[len-2]位置,依次查找交换,直到比较完a[0]和a[1]的大小结束,然后输出排序后的数组

代码一(定义max函数)

c 复制代码
#include<stdio.h>
int max(int a[],int len)
{
	int maxid = 0;
	for(int i=1; i<len; i++)
	{
		if(a[i] > a[maxid])
		{
			maxid = i;
		}
	}
	return maxid;//找到最大数在数组中的下标 
}

int main()
{
	int a[] = {2,45,6,12,87,34,90,24,23,11,65};
	int len = sizeof(a)/sizeof(a[0]);//求数组长度 
	int i = len - 1;
	for(i; i>0; i--)//此处 "i>0;"最后循环到i=1时,数组长度为2,此时只需比较a[0]和a[1]的大小即可 
	{
		int maxid = max(a,i+1);
		int t = a[maxid];
		a[maxid] = a[i];
		a[i] = t;//将最大数与每次循环最右端的数交换位置 
//		printf("%d\n",maxid); 	//输出最大值得下标 
	}
	
	for( int i=0; i<len; i++)
	{
		printf("%d ",a[i]);//输出排序后的数组 
	}
	return 0;
}

代码二

c 复制代码
#include<stdio.h>
int main()
{
	int a[] = {2,45,6,12,87,34,90,24,23,11,65};
	int len = sizeof(a)/sizeof(a[0]);//求数组长度 		
	int i = len - 1;
	for(i; i>0; i--)//此处 "i>0;"最后循环到i=1时,数组长度为2,此时只需比较a[0]和a[1]的大小即可 
	{
		int maxid = 0;
		for(int j=1; j<=i; j++)
			{
				if(a[j] > a[maxid])
				{
					maxid = j;
				}
			}
			
		int t = a[maxid];
		a[maxid] = a[i];
		a[i] = t;//将最大数与每次循环最右端的数交换位置 
		
	}
	
	for( int i=0; i<len; i++)
	{
		printf("%d ",a[i]);//输出排序后的数组 
	}
	return 0;
}

运行结果

相关推荐
卢锡荣44 分钟前
Type-c OTG数据与充电如何进行交互使用应用讲解
c语言·开发语言·计算机外设·电脑·音视频
v_for_van1 小时前
力扣刷题记录2(无算法背景,纯C语言)
c语言·算法·leetcode
二年级程序员1 小时前
动态内存管理
c语言
我能坚持多久1 小时前
D20—C语言文件操作详解:从基础到高级应用
c语言·开发语言
(❁´◡`❁)Jimmy(❁´◡`❁)2 小时前
CF2188 C. Restricted Sorting
c语言·开发语言·算法
想放学的刺客2 小时前
单片机嵌入式试题(第27期)设计可移植、可配置的外设驱动框架的关键要点
c语言·stm32·单片机·嵌入式硬件·物联网
BackCatK Chen3 小时前
第 1 篇:软件视角扫盲|TMC2240 软件核心特性 + 学习路径(附工具清单)
c语言·stm32·单片机·学习·电机驱动·保姆级教程·tmc2240
梵刹古音3 小时前
【C语言】 格式控制符与输入输出函数
c语言·开发语言·嵌入式
VekiSon4 小时前
Linux内核驱动——基础概念与开发环境搭建
linux·运维·服务器·c语言·arm开发
无限进步_4 小时前
面试题 02.02. 返回倒数第 k 个节点 - 题解与详细分析
c语言·开发语言·数据结构·git·链表·github·visual studio