经典排序算法之简单选择排序


前面在介绍冒泡排序的时候,有提到一种简单排序算法,就是从0开始,每次确定一个位置的元素。假设当前需要确定的位置下标为

i,则将i处的元素与后面的元素逐个比较,并将每次比较结果中较小的元素存放在i处,从而保证i处一直保存着最小元素。


简单的选择排序算法与这种算法思路一样,但是选择排序在比较的过程中,并没有将比较结果存放在i处,而是保存每次比较结果中

较小元素的下标到min中,从而保证min永远指向较小元素,最后将min处元素与i处元素交换。从这里可以看出,选择排序是一种

不稳定的排序。以图来表示:




第一轮确定的是下标为0的位置元素,一轮比较下来,最小元素的下标是min = 1,因此,将min处元素与0处元素互换。


以此类推。


将这个过程量化:假设有n个元素,需要确定的下标有0到n-1。最后一个元素无需比较。假设当前需要确定的下标为i,则将min初

始化为i,然后将min处的元素依次与后面n-1-i个元素相比较,min每次指向较小元素。

代买如下:

void SelectSort(int array[], int arrayCount)
{
	int min;
	for(int i = 0; i < arrayCount - 1; ++i)
	{
		min = i;
		for(int j = i + 1; j < arrayCount; ++j)
		{
			if(array[j] < array[min])  //使得min总是指向最小元素
				min = j;
		}
		if(min != i)  //即min有移动过
		{
			int temp = array[i];
			array[i] = array[min];
			array[min] = temp;
		}
	}	
}


选择排序与前面的简单排序算法思路一模一样,不同的地方在于,在寻找最小元素的时候,前者是每次都将最小元素存放到目的

地,而后者则只是暂时存放一下其地址,到最后的时候才需要交换。因此,后者省略了很多的交换操作,更优。

  • 6
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值