zoukankan      html  css  js  c++  java
  • 排序算法(二)

    插入排序

    流程

    • 外循环:从下标为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);
        }
    
    }
  • 相关阅读:
    玲珑学院-ACM比赛1014
    扩展欧几里得算法
    中国剩余定理(孙子定理)及实现----原理详解
    搞懂树状数组
    HDU3792---Twin Prime Conjecture(树状数组)
    树状数组 模板
    HDU1541--Stars(树状数组)
    HDU4046--Panda(树状数组)
    CCF-201604-1-折点计数
    CCF-201604-2-俄罗斯方块
  • 原文地址:https://www.cnblogs.com/juzhuxiaozhu/p/12780298.html
Copyright © 2011-2022 走看看