zoukankan      html  css  js  c++  java
  • 直接插入排序(插入排序)

    简介:

    直接插入的思想是:是将一个记录插入到已排好序的有序表中,从而得到一个新的、记录数增1的有序表。

    例如,排序序列(3,2,1,5)的过程是,初始时有序序列为(3),然后从位置1开始,先访问到2,将2插入到3前面,得到有序序列(2,3),之后访问1,找到合适的插入位置后得到有序序列(1,2,3),最后访问5,得到最终有序序列(1,2,3,5).

     实现:

    package suanfa;
    /*
     * 直接插入排序
     */
    public class StraightInsertionSort {
        
        public static void insertSort(int[] array) {
    
            int len=array.length;
    
            for (int i = 1; i < len; i++) {
    
                int temp = array[i];
    
                int j;
                    
                for(j = i; j > 0; j--) {
                    
                    if(array[j-1] > temp) {
                        
                        array[j] = array[j-1];
                        
                    }else
                        break;
                }
                
               array[j]=temp;        
    
            }
    
           
        }
    
        public static void print(int src[]) {
             for (int i = 0; i < src.length; i++) {
                 
                    System.out.print(src[i] + " ");
                }
             System.out.println();
        }
        
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            int array[]= {3,2,1,5};
            print(array);
            insertSort(array);
            print(array);
        }
    
    }

    分析:

    最好情况下,当待排序序列中记录已经有序时,则需要n-1次比较,不需要移动,时间复杂度为 O(n) 。最差情况下,当待排序序列中所有记录正好逆序时,则比较次数和移动次数都达到最大值,时间复杂度为 O(n^2) 。平均情况下,时间复杂度为 O(n^2) 。

  • 相关阅读:
    分享Kali Linux 2016.2第41周镜像虚拟机
    Visual Studio工具栏中无法选择调试设备
    Xamarin.iOS编译出错
    Xamarin基础命名空间Microsoft.SqlServer.Server
    编译包含Google Play服务App的SDK版本问题
    解决Fiddler无法抓到手机的会话包
    Xamarin.Android编译CPU类型选择方式
    Delphi iOS
    Delphi Android
    CRC16-循环冗余校验
  • 原文地址:https://www.cnblogs.com/liuzhenping/p/7569610.html
Copyright © 2011-2022 走看看