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

深刻理解选择排序


选择排序法基本思想:第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}用选择排序的思维,进行如图分析

从简单的选择排序入手,深刻理解程序_第1张图片

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

//外层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;
			}
		}	


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


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


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

你可能感兴趣的:(排序,程序,选择排序,排序,思考)