七种排序------简单选择排序(Simple Selection Sort)

简单选择排序法就是通过 n - i 次关键字间的比较,从 n - i + 1个记录中选出关键字最小的记录,并和第 i 个记录交换。

代码如下:

void SelectSort(SqList *L)
{
	int i,j,min,k;
	for(i = 0;i<(L->length-1);i++)
	{
		min = i;                            //将当前下标设置为最小值下标
		for(j = i+1;j < (L->length);j++);
		{
			if((L->r[min]) > (L->r[j]))     //如果有小于当前最小值的关键字
			    min = j;                    //将次关键字的下标赋值给min
		}
		if(i != min)                        //若min != i ,说明找到最小值,进行交换
			swap(L,i,min);                  
	}
}

代码应该说不难理解,针对待排序的关键字序列为{9,1,5,8,3,7,4,6,2};对 i 从0循环到7,当i = 0时,L.r[i] = 9,min开始为0,然后与   j = 2到9比较L.r[min]与L.r[j]的值,因为j = 2时最小,所以min = 2,最终交换了L.r[0]和L.r[1]的值,这里虽然比较了8次,但数据只交换了一次。

当 i = 1 时,L.r[i] = 9,min 开始是1,经过比较后,min = 9,交换L.r[1]和L.r[min]的值,这样就找到了第二位置的关键字,之后数据的比较与交换与上面完全相同,最多完成8次交换即可完成排序工作。

简单选择排序的复杂度:

对于交换次数而言,当最好的时候,交换为0次,最差的时候交换为n - 1次。对于比较次数而言为(n*(n - 1)/2),由于最终的排序时间是比较与jioa交换次数的总和,因此总的总的时间复杂度为O(n*n).

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值