选择排序

参考资料:

http://www.cnblogs.com/jingmoxukong/p/4303279.html
http://www.jianshu.com/p/5e171281a387

选择排序
每次从待排序的数组中,找到最小值,并交换到数组的最前面;

选择排序算法思路:

  1. 从待排序的数组中,找出最小的元素;
  2. 如果最小元素,不是待排序数组的第一个元素,将其交换;
  3. 从余下的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);
}
选择排序_第1张图片
Paste_Image.png

你可能感兴趣的:(选择排序)