选择排序 java实现

选择排序:

首先找到数组中最小的那个元素,其次将它和数组的第一个元素交换位置(如果第一个元素就是最小元素,那么它和它自己交换。
* 在剩下的元素中找最小的元素,将其与数组中的第二个元素交换,如此往复,直到将整个数组排序。
* 不断的选择剩余元素中的最小者
    public static void main(String[] args){
        Integer[] a = { 23, 21, 4, 6, 7, 5, 11, 1};
        selectSort(a);
        System.out.println(isSorted(a));
        show(a);
    }
    public static void selectSort(Comparable[] array){
        //遍历整个数组
        for(int i = 0; i < array.length; i++){
            //将a[i] 和a[i + 1...N]中的最小元素交换
            int min = i;//最小元素索引
            for(int j = i + 1; j < array.length; j++){
                if(less(array[j], array[min])){//如果array[j] 比 array[min]小
                    min = j;
                }
            }
            exch(array, i, min);//交换两个元素

        }
    }

    /*
对元素进行比较,v < w 返回真。

 */
    public static boolean less(Comparable v, Comparable w){
        return v.compareTo(w) < 0;//v小于w返回true
    }
    /*
    交换两个元素
     */
    public static void exch(Comparable[] a, int i, int j){
        Comparable t = a[i];
        a[i] = a[j];
        a[j] = t;
    }
    public static void show(Comparable[] a){
        for(int i = 0; i < a.length; i++) {
            System.out.print(a[i] + " ");
        }
    }
    public static boolean isSorted(Comparable[] a) {
        //测试元素是否有序
        for (int i = 1; i < a.length; i++) {
            if (less(a[i], a[i - 1])) {
                return false;
            }
        }
        return true;
    }

时间复杂度:O(N^2)

不稳定排序

猜你喜欢

转载自blog.csdn.net/qq_38765867/article/details/88936698