选择排序
Posted 北方丶有佳人
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了选择排序相关的知识,希望对你有一定的参考价值。
思路:固定数组中的一个位置,将数组其他位置上的元素依次与该(固定住的)位置上的元素进行比较,若比该位置上的元素小(或大),则交换两数,经过第一轮比较,就可以排出一个最小(或最大)的数;然后该位置下移,将剩下的数据再按照第一步不停的与固定住的元素进行比较,交换,最终就可以完成有序排列.
附上代码:
package cn.qujianlei.easy; public class SelectionSortDemo { public static void selectSort(int...a){ for(int i=0;i<a.length-1;i++){ for(int j=i+1;j<a.length;j++){ if(a[i]>a[j]){//按照递增的顺序 a[i]=a[i]^a[j];//这里用异或的方式进行两数的交换 a[j]=a[i]^a[j];//原理:一个数异或另一个数两次仍然是原数 a[i]=a[i]^a[j];//例:a^b^b=a } System.out.print(" 第"+i+"步"+"("+j+")"+"分步排序结果:"); for (int m = 0; m < a.length; m++) { System.out.print(" "+a[m]); } System.out.println(); } System.out.print("第"+i+"步排序结果:"); for (int k = 0; k < a.length; k++) { System.out.print(" "+a[k]); } System.out.println(); } } public static void main(String[] args) { int[]shuzu=new int[10]; for (int i = 0; i < shuzu.length; i++) { shuzu[i]=(int)(Math.random()*101+100);//用Math的随机函数方法初始化数组,随机出来的数的范围是100~201的int型数 } System.out.println("排序前的数组为:"); for (int i = 0; i < shuzu.length; i++) { System.out.print(shuzu[i]+" "); } System.out.println(); selectSort(shuzu); System.out.println("排序后的数组为:"); for (int i = 0; i < shuzu.length; i++) { System.out.print(shuzu[i]+" "); } System.out.println(); } }
运行结果:
排序前的数组为:
149 136 148 107 134 102 134 114 133 186
第0步(1)分步排序结果: 136 149 148 107 134 102 134 114 133 186
第0步(2)分步排序结果: 136 149 148 107 134 102 134 114 133 186
第0步(3)分步排序结果: 107 149 148 136 134 102 134 114 133 186
第0步(4)分步排序结果: 107 149 148 136 134 102 134 114 133 186
第0步(5)分步排序结果: 102 149 148 136 134 107 134 114 133 186
第0步(6)分步排序结果: 102 149 148 136 134 107 134 114 133 186
第0步(7)分步排序结果: 102 149 148 136 134 107 134 114 133 186
第0步(8)分步排序结果: 102 149 148 136 134 107 134 114 133 186
第0步(9)分步排序结果: 102 149 148 136 134 107 134 114 133 186
第0步排序结果: 102 149 148 136 134 107 134 114 133 186
第1步(2)分步排序结果: 102 148 149 136 134 107 134 114 133 186
第1步(3)分步排序结果: 102 136 149 148 134 107 134 114 133 186
第1步(4)分步排序结果: 102 134 149 148 136 107 134 114 133 186
第1步(5)分步排序结果: 102 107 149 148 136 134 134 114 133 186
第1步(6)分步排序结果: 102 107 149 148 136 134 134 114 133 186
第1步(7)分步排序结果: 102 107 149 148 136 134 134 114 133 186
第1步(8)分步排序结果: 102 107 149 148 136 134 134 114 133 186
第1步(9)分步排序结果: 102 107 149 148 136 134 134 114 133 186
第1步排序结果: 102 107 149 148 136 134 134 114 133 186
第2步(3)分步排序结果: 102 107 148 149 136 134 134 114 133 186
第2步(4)分步排序结果: 102 107 136 149 148 134 134 114 133 186
第2步(5)分步排序结果: 102 107 134 149 148 136 134 114 133 186
第2步(6)分步排序结果: 102 107 134 149 148 136 134 114 133 186
第2步(7)分步排序结果: 102 107 114 149 148 136 134 134 133 186
第2步(8)分步排序结果: 102 107 114 149 148 136 134 134 133 186
第2步(9)分步排序结果: 102 107 114 149 148 136 134 134 133 186
第2步排序结果: 102 107 114 149 148 136 134 134 133 186
第3步(4)分步排序结果: 102 107 114 148 149 136 134 134 133 186
第3步(5)分步排序结果: 102 107 114 136 149 148 134 134 133 186
第3步(6)分步排序结果: 102 107 114 134 149 148 136 134 133 186
第3步(7)分步排序结果: 102 107 114 134 149 148 136 134 133 186
第3步(8)分步排序结果: 102 107 114 133 149 148 136 134 134 186
第3步(9)分步排序结果: 102 107 114 133 149 148 136 134 134 186
第3步排序结果: 102 107 114 133 149 148 136 134 134 186
第4步(5)分步排序结果: 102 107 114 133 148 149 136 134 134 186
第4步(6)分步排序结果: 102 107 114 133 136 149 148 134 134 186
第4步(7)分步排序结果: 102 107 114 133 134 149 148 136 134 186
第4步(8)分步排序结果: 102 107 114 133 134 149 148 136 134 186
第4步(9)分步排序结果: 102 107 114 133 134 149 148 136 134 186
第4步排序结果: 102 107 114 133 134 149 148 136 134 186
第5步(6)分步排序结果: 102 107 114 133 134 148 149 136 134 186
第5步(7)分步排序结果: 102 107 114 133 134 136 149 148 134 186
第5步(8)分步排序结果: 102 107 114 133 134 134 149 148 136 186
第5步(9)分步排序结果: 102 107 114 133 134 134 149 148 136 186
第5步排序结果: 102 107 114 133 134 134 149 148 136 186
第6步(7)分步排序结果: 102 107 114 133 134 134 148 149 136 186
第6步(8)分步排序结果: 102 107 114 133 134 134 136 149 148 186
第6步(9)分步排序结果: 102 107 114 133 134 134 136 149 148 186
第6步排序结果: 102 107 114 133 134 134 136 149 148 186
第7步(8)分步排序结果: 102 107 114 133 134 134 136 148 149 186
第7步(9)分步排序结果: 102 107 114 133 134 134 136 148 149 186
第7步排序结果: 102 107 114 133 134 134 136 148 149 186
第8步(9)分步排序结果: 102 107 114 133 134 134 136 148 149 186
第8步排序结果: 102 107 114 133 134 134 136 148 149 186
排序后的数组为:
102 107 114 133 134 134 136 148 149 186
注:括号内的数任然是内层循环。
附上图解:
简单点说就是每次都定住一个数,将它与其他的数进行比较,比它小就交换,不小就继续比较下一个,与其他数比较完了之后,换下一个数接着定,接着比,交换,循环...
以上是关于选择排序的主要内容,如果未能解决你的问题,请参考以下文章
初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段