【C语言】选择排序

算法原理

(假设这些数字在排队)

1.首先从这个队伍中找出值最大(小)的数字 放在队首

此时想象把队伍分成两组

一组有序 即刚刚找出的那个数字 

一组无序 即除了队首的那个数字

2.然后开始从无序的那组队伍开始寻找最大(小)的数字

一旦找到就放到刚刚有序队伍的队尾

以此类推直至所有数字都排序完毕

整体思路

我们可以看出选择排序的整体思路就是 从无序队列中找出最大(小)的数字放到有序队列的队尾 有序队列一直在扩充,无序队列一直在减少直至排序完毕


代码如下

void select_sort(int* src, int size) {
	for (int i = 0;i < size-1;i++) {
		int Max = i;                       //刚开始时将i的值赋给了Max
		for (int j = i + 1;j < size;j++) {
			if (src[Max] < src[j]) {   //如果比较出来了下标为j的元素的值大于下标为Max的元素的值
				Max = j;               //就将j赋值给Max
			}
		}
		if (Max != i) {    //如果Max不等于i则说明第i大的数字不在第i大的位置上 所以要交换
			int tmp = src[Max];
			src[Max] = src[i];
			src[i] = tmp;
		}
	}
}

部分代码分析

int Max = i;                       //刚开始时将i的值赋给了Max
		for (int j = i + 1;j < size;j++) {
			if (src[Max] < src[j]) {   //如果比较出来了下标为j的元素的值大于下标为Max的元素的值
				Max = j;               //就将j赋值给Max
			}
		}

这段代码就相当于在找最大的那个数的下标

if (Max != i) {    //如果Max不等于i则说明第i大的数字不在第i大的位置上 所以要交换
			int tmp = src[Max];
			src[Max] = src[i];
			src[i] = tmp;
		}

这段代码就是说 在第二个for循环结束后 找到了最大值得下标 如果下标不等于i [i,size) 就将这个两个下标的元素互换

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值