• 排序算法(二)


    插入排序

    流程

    • 外循环:从下标为1的元素开始向后(右)遍历。

    • 内循环:从外循环的下标开始,与前(左)一个值相比。

      1. 若前方值较小,则不变(其实,因为左边已经是有序的了,所以此处可以直接退出内循环。)
      2. 若前方值较大,则交换,并进一步与更前方的值比较。

    特点

    1. 适合小规模数组和有序程度高的数组。

    2. 一般作为高级排序算法的中间过程。

    3. 插入的含义体现在内循环时,将当前值插入到有序部分的合适位置。

    代码如下

    public class Insertion {
        //用于交换数组对应下标的两值
        private static void exch(Comparable[] a,int i,int j){
            Comparable t=a[i];
            a[i]=a[j];
            a[j]=t;
        }
        //用于判断前者是否小于后者,是则返回true
        private static boolean less(Comparable v,Comparable w){
            return v.compareTo(w)<0;
        }
        //用于判断数组是否有序(自然序)
        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 sort(Comparable[] a){
            for(int i=1;i<a.length;i++){
                for(int j=i;j>0&&less(a[j],a[j-1]);j--){
                    exch(a,j,j-1);
                }
            }
        }
    
        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);
        }
    
    }
  • 相关阅读:
    iOS设计模式-工厂方法
    iOS设计模式-原型模式
    (转)iOS 屏幕适配
    iOS设计模式-MVC
    转 常用第三方库
    学习资料收集
    xcode 插件
    CocoaPods安装和使用
    iOS 友盟统计的bug分析
    HTML——表格
  • 原文地址:https://www.cnblogs.com/juzhuxiaozhu/p/12780298.html
Copyright © 2020-2023  润新知