从简单的选择排序入手,深刻理解程序

深刻理解选择排序


选择排序法基本思想:第1趟,在待排序记录r[1]~r[n]中选出最小的记录,将它与r[1]交换;第2趟,在待排序记录r[2]~r[n]中选出最小的记录,将它与r[2]交换;以此类推,第i趟在待排序记录r[i]~r[n]中选出最小的记录,将它与r[i]交换,使有序序列不断增长直到全部排序完毕

给定一组数据int[] nums ={21, 14, 17, 12, 5, 10}用选择排序的思维,进行如图分析

根据上面所述进行代码实现:

<span style="font-size:14px;">//外层for循环执行一次,有一个数回归正确位置,所以只需比较length-1次
		 for (int i = 0; i < nums.length - 1; i++) {
			 int m = i;
  			//内层for循环执行结束,即可找出最小数的角标
 			for (int j = i + 1; j < nums.length; j++) {
				 if (nums[j] < nums[m]){
					m = j;//使用m记录一个选择回合中的最小值的位置
				 }
  			}
			//通过m与i值的比较,做出是否进行交换的选择
 			if (m != i){
 				int temp = 0;
 				temp =nums[m];
 				nums[m] = nums[i];
				 nums[i] = temp;
			}
		}	
</span>


现在来反观程序:外层for循环内部有三个基本操作:1.将当前数的位置赋值给中间变量。2.确定本次选择中最小数的位置3.通过最小数位置的和当前数的位置的比较,进行数的交换。这三个步骤执行n-1次,然后排序完成。


现在来看,是不是思路很清晰,但是当我们开始遇见这个问题时,看了它的基本思想后,我们能从中抽取出这样清晰的基本思路吗?然后设计出程序吗?


每一个程序,既有差异,又有共性,将他们的思想抽象成程序的步骤,这是我们需要锻炼的一种能力。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值