排序——选择排序之直接选择排序

来源:互联网 发布:淘宝手机充值怎么退款 编辑:程序博客网 时间:2024/05/27 09:45

直接选择排序(StraightSelectSort)算法思想:

第一趟从n个元素的数据序列中选出关键字最小/大的元素并放到最前/后位置,下一趟再从n-1个元素中选出最小/大的元素并放到次前/后位置,以此类推,经过n-1趟完成排序。

代码实现如下:


package g;

public class StraightSelectSort {
    public static int[] randomInt(int n, int size) {
        int[] value = new int[n];
        for (int i = 0; i < value.length; i++) {
            value[i] = (int) (Math.random() * size);
        }
        return value;
    }

    public static void print(int[] value) {
        for (int i : value) {
            System.out.print(i + " ");
        }
    }

    // 交换元素keys[i]与keys[j]元素,i、j范围由调用者控制
    public static void swap(int[] keys, int i, int j) {
        int temp = keys[i];
        keys[i] = keys[j];
        keys[j] = temp;
    }

    // 直接选择排序(升序)
    public static void selectSort(int[] keys) {
        // n-1趟排序
        for (int i = 0; i < keys.length - 1; i++) {
            int min = i;
            // 每趟再从keys[i]开始的子序列中寻找最小元素
            for (int j = i + 1; j < keys.length; j++) {
                if (keys[j] < keys[min]) {
                    // min用来保存一趟中最小元素的下标
                    min = j;
                }
            }
            if (min != i) {
                swap(keys, i, min);
            }
            System.out.print("\n第" + (i + 1) + "趟 : ");
            print(keys);
        }
    }

    public static void main(String[] args) {
        int[] values = StraightSelectSort.randomInt(10, 100);
        System.out.print("关键字序列:");
        StraightSelectSort.print(values);
        StraightSelectSort.selectSort(values);
    }
}


输出如下:


关键字序列:17 96 77 74 28 41 13 75 56 42
第1趟 : 13 96 77 74 28 41 17 75 56 42
第2趟 : 13 17 77 74 28 41 96 75 56 42
第3趟 : 13 17 28 74 77 41 96 75 56 42
第4趟 : 13 17 28 41 77 74 96 75 56 42
第5趟 : 13 17 28 41 42 74 96 75 56 77
第6趟 : 13 17 28 41 42 56 96 75 74 77
第7趟 : 13 17 28 41 42 56 74 75 96 77
第8趟 : 13 17 28 41 42 56 74 75 96 77
第9趟 : 13 17 28 41 42 56 74 75 77 96

0 0