简单排序--选择排序

选择排序:

public void sort(){
		int out,in,min;
		for(out=0;out<nElements-1;out++){
			min = out;
			for(in=out+1;in<nElements;in++)
				if(arr[in]<arr[min])
					min = in;
				swap(out,min);//将min放在out位置,out始终指向最小值的下一个位置,即下一个min要存放的位置		
		}
	}

选择排序改进了冒泡排序,将必要的交换次数从O(N^2)减少到O(N),但比较次数仍然为O(N^2).

min先指向第一个元素,in指向第二个元素,先与min比较,之后不断右移,过程中不断更新min的最小值。第一轮比较完成后,将最小值min与out交换,这样一轮下来比较N-1次(N为未排序个数),只交换一次。

初始状态:


in右移,min更新:


第一轮比较结束,数组中的最小值已经排好序,outer右移到待排序的第一个:


排序完毕:


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值