选择排序算法思想

选择排序的基本思想是:如果有N个元素需要排序,那么首先从N个元素中找到最小的那个元素与第0位置上的元素交换(说明一点,如果没有比原本在第0位置上的元素小的就不用交换了,后面的同样是),然后再从剩下的N-1个元素中找到最小的元素与第1位置上的元素交换,之后再从剩下的N-2个元素中找到最小的元素与第2位置上的元素交换,.......直到所有元素都排序好(也就是直到从剩下的2个元素中找到最小的元素与第N-2位置上的元素交换)。

注意,我们的排序有稳定和不稳定之分。稳定排序的意思是:比如原本一组无序的元素中出现两个相同的值,那么经过稳定排序后这两个相等的元素必然相邻,不改变原来无序状态下的先后顺序叫稳定的排序。(不懂我这样说明白了没有,下面给个例子)

那么不稳定排序就是,原本相等的元素之间的顺序经过不稳定的排序后顺序随机,有可能保持原来的,有可能是打乱的。


那么下面我给出具体程序:

void SelectionSort(int a[], int size)
{
	for(int i = 0;i < size-1;i++){
	//每次循环后将第i小的元素放好 
		int tempMin = i;
	//记录第i个到底size-1个元素中,最小的元素的下标
		for(int j = i+1;j < size;j++){
			if(z[j] < a[tempMin])
				tempMin = j;		
		} 
	//下面将第i小的元素放在第i个位置上,并将原来第i个位置的元素挪到后面
		int tmp = a[i];
		a[i] = a[tempMin];
		a[tempMin] = tmp; 
	}
} 

下面分析时间复杂度:外重循环的循环体执行(size-1)次。对于每次外重循环体的执行,第7行內重循环中的j<size这个判断需要执行(size-i)次。由于i从0变到(size-2),因此j<size这个判断一共需要执行2+3+...+size次,即(size+1)*size/2-1次。因此该函数的时间复杂度就是 O(size^2)的。当然,也可以说第7行的j<size这个判断要执行(size+1)*size/2次,因此复杂度就是 O(size^2).
  • 15
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值