参考资料:
http://www.cnblogs.com/jingmoxukong/p/4303279.html
http://www.jianshu.com/p/5e171281a387
选择排序
每次从待排序的数组中,找到最小值,并交换到数组的最前面;
选择排序算法思路:
- 从待排序的数组中,找出最小的元素;
- 如果最小元素,不是待排序数组的第一个元素,将其交换;
- 从余下的n-1的数组中,找出最小的元素,重复第 1 、2 步,直到排序完成
实现代码:
public static void sort3(int a[]) {
int length = a.length;
// 需要遍历获取最小值的次数;
// 前面 i 个元素之前的数组,是排序好的,因为后面有 (int j = j+1, 所有这里 length - 1)
for (int i = 0; i < length - 1; i++) {
int minValue = a[i]; // 本地循环中找到的最小的数
int minIndex = i; // 最小数的索引
// 遍历待排序数组, 从第 i+1个元素开始往后遍历
for (int j = i + 1; j < a.length; j++) {
if (minValue > a[j]) { // 如果大,则记录新的最小值和下标
minValue = a[j];
minIndex = j;
}
}
// 没有找到,重新开始循环,减少交换次数
if (minIndex == i) {
continue;
}
// 交换2个数
a[minIndex] = a[i];
a[i] = minValue;
System.out.format("第 %d 趟:\t", i + 1);
printArray(a);
}
}
public static void printArray(int[] a) {
if (a != null) {
for (int i : a) {
System.out.print(i + "\t");
}
System.out.println();
}
}
测试输出
public static void main(String[] args) {
int a[] = {1, 5, 9, 3, 2, 0, 4, 7, 6, 8}; //sort1(a);
sort3(a);
}