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] + ",");
}
}
}