选择排序
2015-06-05 21:49
176 查看
What?
选择排序(Selection
sort):顾名思义选择一个数进行排序。在数组中,选出一个元素,一次进行比较,在第一轮中知道将最小的或者最大的放到最前边。这种排序是最简单直观的一种排序的方式。
How?
我们先用一张图说明一下:
详细的说明:
以上是一个数组,根据选择排序的思想,第一轮我们选择第一个元素3,依次和其他的元素进行对比,比他小的就要放到前边,这样最终第一轮的结果如上图所示,其他几轮也是这样排序下来的。
这样放到我们的编程中来的思想和上边的想法是一样的道理,其实就是两个For循环的嵌套。
Java代码:
Why?
选择排序比较直观简单,而且交换次数比冒泡排序交换的次数少,这样他的效率会高一些。但是选择排序还存在一个安全隐患。
如果在排序的数组中,出现了相同的两个元素,那么在选择排序中会不知情,这样就会遭成排序的不稳定。
总结:
没接触到选择排序的时候,感觉 挺难,很难,但是当我们搞懂原理,搞懂这个排序算法的思想的时候,发现其实并不是那么困难。知识要学会前后联想,两个for循环很想是搭建一个倒三角形。这样知识就贯通起来,就很容易理解一个知识点了。
选择排序(Selection
sort):顾名思义选择一个数进行排序。在数组中,选出一个元素,一次进行比较,在第一轮中知道将最小的或者最大的放到最前边。这种排序是最简单直观的一种排序的方式。
How?
我们先用一张图说明一下:
详细的说明:
以上是一个数组,根据选择排序的思想,第一轮我们选择第一个元素3,依次和其他的元素进行对比,比他小的就要放到前边,这样最终第一轮的结果如上图所示,其他几轮也是这样排序下来的。
这样放到我们的编程中来的思想和上边的想法是一样的道理,其实就是两个For循环的嵌套。
Java代码:
/* 作者:雪 时间:2015年5月11日 功能:选择排序 思路: 选择排序就是选择出一个元素,然后依次和后边的进行对比 对比之后,进行交换 其实和倒三角形差不多 */ public class SelectSort { //因为是对一个数组进行操作,进行排序,所以不需要有返回值 public static void Select(int arry[]) { //因为到最后之后,选择排序就不用让最后一个进行对比,排序到最后肯定就已经排序好了所以长度-1 //外层是选择出一个元素,然后选择完后和内层分别进行对比 //嵌套循环 for(int x=0;x<arry.length-1;x++) { //第一个元素肯定不能和第一个进行比较, for(int y=x+1;y<arry.length;y++) { if(arry[x]>arry[y]) { int tmp=arry[x]; arry[x]=arry[y]; arry[y]=tmp; } } } } public static void main(String[]args) { int[] arr={1,2,7,8,34,9,3}; Print(arr); Select(arr); Print(arr); } //将打印的语句封装成一个函数 public static void Print(int[] arry) { for(int x=0;x<arry.length;x++) { //如果x不是最后一个元素 if(x!=arry.length-1) { System.out.print(arry[x]+","); } else { System.out.print(arry[x]); } } System.out.println(""); } }通过代码和思路,我们可以想象一下之前敲过的三角形的代码,这个是很相似的,不管是选择排序还是冒泡排序都是从这样的基本的排序思想中演化过来的。
Why?
选择排序比较直观简单,而且交换次数比冒泡排序交换的次数少,这样他的效率会高一些。但是选择排序还存在一个安全隐患。
如果在排序的数组中,出现了相同的两个元素,那么在选择排序中会不知情,这样就会遭成排序的不稳定。
总结:
没接触到选择排序的时候,感觉 挺难,很难,但是当我们搞懂原理,搞懂这个排序算法的思想的时候,发现其实并不是那么困难。知识要学会前后联想,两个for循环很想是搭建一个倒三角形。这样知识就贯通起来,就很容易理解一个知识点了。
相关文章推荐
- 一个将任意字符或字符串按位转化为整数的方法
- jQuery常用的正则表达式
- 监听器和接口的使用(总结)学习java第四天
- bjfu1332 简单动规
- 去除开机自动弹出的“Enter password to unlock your login keyring”对话框
- Linux终端下的命令
- 随笔7
- Git远程操作详解
- Maximal Square || LeetCode
- 海量数据处理技术(1): 散列技术
- 单元测试解决HttpContext的问题
- quick接入SDK
- icpc2015 D Cutting Cheese(二分+球缺体积)
- IDF实验室-特殊的日子
- QQ通信原理及QQ是怎么穿透内网进行通信的?
- [GUI] QT事件与X11的关系
- String to Integer (atoi)
- 单元测试解决HttpContext的问题
- 面试题22 栈的压入、弹出序列
- Activity dispatchTouchEvent事件分发--测试(一)