C++ 实现选择排序法

选择排序法

选择排序法的方式是在一堆无序的数组中找到最小(最大)的值,然后通过交换来实现排序,记住是交换

它是一种不稳定的排序算法,额,这里崩出个不稳定是个啥,看到有个通俗的解释是,有 A、B、C三位同学,他们的成绩是 85 85 80,然后使用选择排序法(从低到高)后就是CBA,其中 A 和 B同学成绩一样,他们的顺序应该不要变动,所以:

稳定排法:CAB

不稳定排法:CBA 

一小段排序实现,比较简单,直接上代码

// 选择排序法
void sort(int* buf, int len)
{
	int min_index = 0;	// 在未排序的数组中最小元素下标
	int min_value = 0;	// 在未排序的数组中最小元素值

	for (int i = 0; i < len - 1; ++i) {
		min_index = i;			
		min_value = buf[i];		// 每次假定这个值最小

		for (int j = i + 1; j < len; ++j) {
			if (min_value > buf[j]) {	// 发现有比 min_value 更小的值
				min_value = buf[j];		// 记录这个值
				min_index = j;			// 记录这个下标
			}
		}

		// 如果 min_value 的下标和上面假定那个值的下标不同,则说明有更小的值,所以进行交换
		if (min_index != i) {
			buf[min_index] = buf[i];
			buf[i] = min_value;
		}
	}
}

测试主函数

// 主函数
int main(int argc, char* argv[])
{
	int buf[] = { -64, 2, 5, 3 ,-2 };
	int len = sizeof(buf) / sizeof(int);
	
	sort(buf, len);

	for (int i = 0; i < len; ++i) {
		cout << buf[i] << " ";
	}

	return 0;
}

运行结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值