从简单的选择排序入手,深刻理解程序
2016-04-03 21:34
211 查看
深刻理解选择排序
选择排序法基本思想:第1趟,在待排序记录r[1]~r
中选出最小的记录,将它与r[1]交换;第2趟,在待排序记录r[2]~r
中选出最小的记录,将它与r[2]交换;以此类推,第i趟在待排序记录r[i]~r
中选出最小的记录,将它与r[i]交换,使有序序列不断增长直到全部排序完毕
给定一组数据int[] nums ={21, 14, 17, 12, 5, 10}用选择排序的思维,进行如图分析
![](http://img.blog.csdn.net/20160403221153759?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
根据上面所述进行代码实现:
现在来反观程序:外层for循环内部有三个基本操作:1.将当前数的位置赋值给中间变量。2.确定本次选择中最小数的位置3.通过最小数位置的和当前数的位置的比较,进行数的交换。这三个步骤执行n-1次,然后排序完成。
现在来看,是不是思路很清晰,但是当我们开始遇见这个问题时,看了它的基本思想后,我们能从中抽取出这样清晰的基本思路吗?然后设计出程序吗?
每一个程序,既有差异,又有共性,将他们的思想抽象成程序的步骤,这是我们需要锻炼的一种能力。
选择排序法基本思想:第1趟,在待排序记录r[1]~r
中选出最小的记录,将它与r[1]交换;第2趟,在待排序记录r[2]~r
中选出最小的记录,将它与r[2]交换;以此类推,第i趟在待排序记录r[i]~r
中选出最小的记录,将它与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次,然后排序完成。
现在来看,是不是思路很清晰,但是当我们开始遇见这个问题时,看了它的基本思想后,我们能从中抽取出这样清晰的基本思路吗?然后设计出程序吗?
每一个程序,既有差异,又有共性,将他们的思想抽象成程序的步骤,这是我们需要锻炼的一种能力。
相关文章推荐
- oracle开发人员误删表的操作及恢复
- MILLer素数测试法
- JSON解析方案
- 嵌套For循环性能优化案例
- 终端
- 腾讯笔试题-编程题3 变相求回文数
- 修改第三方jar包
- 电商平台学习笔记(八)——面向接口编程案例分析
- 福布斯:中国虚拟现实头盔除了便宜无其它优势
- 福布斯:中国虚拟现实头盔除了便宜无其它优势
- 【OkHttp3源代码分析】(一)Request的execute
- cmake 学习笔记(二)
- Java的switch语句
- 阻塞信号
- 大端序和小端序
- CF 120 D.Three Sons【细节题】
- Point和PointF
- 信号
- Making Change UVA, 166
- 数据库索引之稠密索引和稀疏索引