排序算法(一)

选择排序

流程

  • 外循环:依次遍历每个元素,下标作为最小值索引,对应元素作为最小值。

  • 内循环:依次遍历外层下标以后的每一个元素,进行:

    1. 与最小值比较,若小于最小值,则更新当前下标为最小值索引。
    2. 遍历完毕,交换最小值。

特点

  1. 运行时间与输入无关。都为(frac{1}{2}N^2)

  2. 数据移动最小,与数组大小 N 成正比。

  3. 选择的含义体现在每次内循环都选出了最小的元素。

代码如下:

public class Selection{
    //对外提供排序方法
    public static void sort(Comparable[] a){
        for(int i=0;i<a.length;i++){
            //最小值对应的索引
            int min=i;
            for(int j=i+1;j<a.length;j++){
                if(less(a[j],a[min])){
                    min=j;
                }
            }
            exch(a,i,min);
        }
    }

    //判断前者是否小于后者
    private static boolean less(Comparable a,Comparable b){
        return a.compareTo(b)<0;
    }

    //两者交换
    private static void exch(Comparable[] a,int i,int j){
        Comparable t=a[i];
        a[i]=a[j];
        a[j]=t;

    }

    //判断是否有序(自然序)
    private static boolean issort(Comparable[] a){
        for(int i=0;i<a.length-1;i++){
            if(less(a[i+1],a[i])){
                return false;
            }
        }
        return true;
    }
    
    //对外提供展示方法
    public static void show(Comparable[] a){
        for(Comparable c:a){
            System.out.println(c);
        }
    }

    public static void main(String[] args) {
        Integer[] a={8,7,6,8,2,4,5,2,1};
        sort(a);
        System.out.println(issort(a));
        show(a);

    }

}
原文地址:https://www.cnblogs.com/juzhuxiaozhu/p/12776139.html