【C语言排序方法(二)】选择排序

本文介绍了选择排序的基本思想和图例说明,详细解释了选择排序的过程,并提供了C语言的算法实现。选择排序通过不断遍历数组,找到最小元素并交换到正确位置,逐步完成排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本思想及图例说明

  • 冒泡排序是通过不断地将相邻的两个数进行比较,来达到排序的目的。
  • 选择排序则是不断地遍历所有元素,找到最小(最大)的放在首位。

下面看图例:

初始序列: 5 2 4 6 1 3

第一次遍历找到最小的数 1 ,将他和首位元素 5 交换。
第一趟:1 2 4 6 5 3

第二次遍历除首位外的数,将最小的数 2 和第二位元素交换,但是 2 已经在第二位所以位置不变。
第二趟:1 2 4 6 5 3

第三次遍历除第一位和第二位的元素,将最小的数 3 和第三位元素交换。
第三趟:1 2 3 6 5 4

以此类推……

算法实现

对于具有 N 个元素的数组 arr[ N ]:

第 1 趟,在待排序数组元素 arr[ 1 ] ~ arr[ N ] 中选出最小的元素,将它与 arr[ 1 ] 交换;

第 2 趟,在待排序数组元素 arr[ 2 ] ~ arr[ N ] 中选出最小的元素,将它与 arr[ 2 ] 交换;

以此类推,第 i 趟在待排序数组元素 arr[ i ] ~ arr[ N ]中选出最小的元素,将它与 arr[ i ] 交换,使有序序列不断增长直到全部排序完毕。

代码:

#include<stdio.h>
int main()
{
	int p, temp;// p 用来标记最小元素的位置 
	int a[8] = {6, 5, 3, 1, 8, 7, 2, 4};
	// i < 7 是因为要前后进行比对,如果 i 为最后一位时就没有与后面元素比对的必要 
	for(int i = 0; i < 7; i ++)
	{
		//默认最小元素位于首位 
		p = i; 
		//遍历 i 后所有的元素,找到最小的元素位置 
		for(int j = i + 1; j < 8; j ++)
		{							    
			//如果有比首位元素更小的元素用 p 记录它的位置
			//将大于改成小于可达到从大到小的排序目的 
			if(a[p] > a[j]) 
			{				   
				p = j;
			}
		}
		//将最小的元素和首位交换 
		temp = a[i];
		a[i] = a[p];
		a[p] = temp;
	}
	for(int i = 0; i < 8; i ++)
	{
		printf("%d ", a[i]);
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值