zoukankan      html  css  js  c++  java
  • 排序之插入类排序

    1。直接插入排序

    package Sort; 
    /** 
     * @author wangpei 
     * @version 
     *创建时间:2017年3月28日 下午7:30:37 
     * 插入排序中的直接插入排序
     * 思路:对于r[i],其r[1]-r[i-1]位为有序的,r[i]插入到该有序序列中,
     * 再依次向下,比较r[i+1]......
     */
    
    
    //适用于序列基本有序的情况。最好情况比较n-1次,移动(n+2)*(n-1)/2
    //最坏情况比较(n+2)*(n-1)/2,移动(n-1)*(n+4)/2
    //平均:o(n*n)
    public class Zhijiecharu {
        public static void main(String[] args) {
            int a[]={0,2,5,3,9,10,1};
            sort(a);
        }
        public static void sort(int a[] ){
            int j=0;
            for(int i=2;i<a.length;i++){
                a[0]=a[i];
                for(j=i-1;a[0]<a[j];j--){//将其插入前边的i-1位
                     a[j+1]=a[j];
                } 
                a[j+1]=a[0];
            }
            for(int i=1;i<a.length;i++){
                System.out.println(a[i]);
            }
    
        }
    
    }
    

    2。折半插入排序

    package Sort; 
    /** 
     * @author wangpei 
     * @version 
     *创建时间:2017年3月28日 下午7:58:43 
     * 折半插入
     * 思路: 先在第i-1个元素中折半查找出i要插入的位置,然后移位插入。
     */
    //稳定排序,时间复杂度:o(n*n)
    public class Zhebancharu {
        public static void main(String[] args) {
            int a[]={0,2,5,3,9,10,1};
            sort(a);
        }
    
        public static void sort(int a[] ){
            for (int i = 2; i < a.length; i++) {
                //先查找a[i]在前i-1个元素中要插入的位置
                int low=1;
                int high=i-1;
                a[0]=a[i];
                while(low<=high){
                    int mid=(low+high)/2;
                    if(a[mid]>a[0]) high=mid-1;
                    else     low=mid+1;
                }//最终查找到i的插入位置为low
                for(int k=i-1;k>=low;k--){
                    a[k+1]=a[k];
                }
                a[low]=a[0];
    
            }
            for (int i = 1; i < a.length; i++) {
                System.out.println(a[i]+",");
    
            }
    
        }
    
    }
    
  • 相关阅读:
    第十一篇:Mysql系列
    mysql八:ORM框架SQLAlchemy
    mysql七:视图、触发器、事务、存储过程、函数
    mysql六:数据备份、pymysql模块
    工厂方法模式
    execution表达式
    CentOS系统下安装SVN及常用命令
    Spring Boot 表单验证、AOP统一处理请求日志、单元测试
    SSH文件上传代码片段
    JPA 实体映射
  • 原文地址:https://www.cnblogs.com/wangxiaopei/p/8551220.html
Copyright © 2011-2022 走看看