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

    一.直接插入排序(Straight Insertion Sort)

       排序的过程如下:给定无需序列:(3,6,9,7,1,8,2,4) 

       ① 3,6,9,7,1,8,2,4 (将6插入到有序序列3中) 

       ② 3,6,9,7,1,8,2,4 (将9插入到有序序列3,6中)

       ③ 3,6,9,7,1,8,2,4 (将7插入到有序序列3,6,9中) 

       ④ 3,6,7,9,1,8,2,4 (将1插入到有序序列3,6,7,9中) 

       ⑤ 1,3,6,7,9,8,2,4 (将8插入到有序序列1,3,6,7,9中) 

       ⑥ 1,3,6,7,8,9,2,4 (将2插入到有序序列1,3,6,7,8,9中) 

       ⑦ 1,2,3,6,7,8,9,4 (将4插入到有序序列1,2,3,6,7,8,9中) 

       ⑧ 1,2,3,4,6,7,8,9  (排序成功)

    #include<stdio.h>
    #define M 100
    int R[M];
    
    void insertSort(int n)
    {
        int i,j;
        for (i=2;i<=n;i++)
        {
            if (R[i]<R[i-1])
            {
                R[0]=R[i];
                j=i-1;
                do
                {
                    R[j+1]=R[j];
                    j--;
    
                }
                while (R[0]<R[j]);
            }
            R[j+1]=R[0];
        }
    }
    int main()
    {
        int i,n;
    
        scanf("%d",&n);
        for (i=1;i<=n;i++)
        {
            scanf("%d",&R[i]);
        }
    
        printf("before sort numbers 
    ");
    
        for (i=1;i<=n;i++)
        {
            printf("%4d",R[i]);
        }
    
        insertSort(n);/*调用直接插入了排序*/
        printf("
     after sort numbers 
    ");
        for (i=1;i<=n;i++)
        {
            printf("%4d",R[i]);
        }
    
    }
    View Code
    #include<stdio.h>
    #define M 100
    int R[M];
    
    void insertSort(int n)
    {
        int i,j;
        for (i=2;i<=n;i++)
       { 
    
        if(R[i]<R[i-1]) 
    
        { 
    
          R[0]=R[i]; 
    
          for(j=i-1;R[0]<R[j];--j) 
    
         R[j+1]=R[j]; 
    
          R[j+1]=R[0]; 
    
         } 
    
      } 
    }
    int main()
    {
        int i,n;
    
        scanf("%d",&n);
        for (i=1;i<=n;i++)
        {
            scanf("%d",&R[i]);
        }
    
        printf("before sort numbers 
    ");
    
        for (i=1;i<=n;i++)
        {
            printf("%4d",R[i]);
        }
    
        insertSort(n);/*调用直接插入了排序*/
        printf("
     after sort numbers 
    ");
        for (i=1;i<=n;i++)
        {
            printf("%4d",R[i]);
        }
    
    }
    View Code

    二,直接插入排序( straight insertion sort )是一种最简单的排序方法。它的基本操作是将一个记录插入到一个长度为 m (假设)的有序表中,使之仍保持有序,从而得到一个新的长度为 m + 1 的有序表。

     

    此算法外循环 n-1 次,在一般情况下内循环平均比较次数的数量级为O(n) ,所以算法总时间复杂度为O(n2) 。

    插入排序的过程中比较的过程就是一个查找的过程,为了更加快速的找到“合适的位置”,可以使用高效些的查找算法,例如和折半查找结合,就形成了  折半插入排序。

  • 相关阅读:
    oracle 11g SKIP_UNUSABLE_INDEXES参数
    oracle /*+ SYS_DL_CURSOR */ 这个hint
    各种存储的访问延时数量级备忘参考
    linux交换区使用过多导致的性能问题
    JSch : channel never closed or EOF 通道未关闭
    The Architecture of Open Source Applications: Berkeley DB
    vs变量监视提示-VAR-CREATE: UNABLE TO CREATE VARIABLE OBJECT解决方法
    centos 6.5 gdb 7.10安装make[5]: *** [install-bfdincludeHEADERS] Error 1解决
    oracle 11g禁用和强制direct path read
    sqlloader parallel调用报ORA-26002: table has index defined upon it.解决方法
  • 原文地址:https://www.cnblogs.com/wc1903036673/p/3499286.html
Copyright © 2011-2022 走看看