package com.tang.flight.util; public class AlgSelectSort { /** * 算法 selectSort * 作 者: tangxin * 日 期: 2013-1-29-上午09:50:25 * @param a[0,n-1] * 返回类型: void 按照非降序排列的数组a[0,n-1] */ public void selectSort(int[] a){ //切勿死记硬背找到方式方法 //这个算法的排序又称冒泡排序 //出发点:首先从数组中找到一个最小的放到第一位 //如何第一次找到最小的 for (int i = 0; i < a.length; i++) { //定义临时变量 int b; if((i+1)<a.length&&a[i+1]<a[i]){ b = a[i]; a[i]=a[i+1]; a[i+1]=b; } //伪代码 //输入:{3,5,1,43,29,20}; //输出:3,1,1,29,20,20, //得到如此结果,首先第一点没有把两个元素交换位置 //修改:添加 a[i+1]=a[i]; //输入:{3,5,1,43,29,20}; //输出:3,1,5,29,20,43, //从中看以看到自己的思维方式,只是把后面小的放到前面去了 } } public static void main(String[] args) { AlgSelectSort sort = new AlgSelectSort(); int [] a = {3,5,1,43,29,20}; sort.selectSort(a); for (int i = 0; i < a.length; i++) { System.out.print(a[i]+","); } } }
package com.tang.flight.util; import static org.junit.Assert.*; import org.junit.Test; public class AlgSelectSortTest { @Test public void testSelectSort3() { int[] a; a = new int[] { 3, 5, 1, 43, 29, 20 }; //首先把最小的比较出来 //第一个数字自己就不用和自己做比较了 //输入:{3,5,1,43,29,20}; for (int i = 0; i < a.length - 1; i++) { //如上6个数字第一个a[0]=3比较5次 if (a[i + 1] < a[i]) { int b = a[i]; a[i] = a[i + 1]; a[i + 1] = b; } } for (int i = 0; i < a.length; i++) { System.out.print(a[i] + ","); } //输入:{3,5,1,43,29,20}; //输出:3,1,5,29,20,43, //从中可以看出自己又陷入了第一个方法里面了 //应该是第一个数字和后面的数字都比较 } @Test public void testSelectSort4() { int[] a; a = new int[] { 3, 5, 1, 43, 29, 20 }; //输入:{3,5,1,43,29,20}; //选最小的 //外循环判断轮数 for (int i = 0; i < a.length-1; i++) { //i数组和j数组比较 先排第一个最小的 在排第二个最小的依次 int min = i; //内循环比较大小 for (int j = i+1; j < a.length; j++) { if (a[j]<a[min]) { int temp = a[min]; a[min] = a[j]; a[j] = temp; } } } for (int i = 0; i < a.length; i++) { System.out.print(a[i] + ","); } } }