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

    插入排序不适合对于数据量比较大的排序应用。如果数据量很小,比如量级小于千,插入排序还是一个不错的选择。

     1 /*
     2 
     3 1.从第一个元素开始,该元素可以认为已经被排序
     4 
     5 2.取出下一个元素,在已经排序的元素序列中从后向前扫描
     6 
     7 3.如果该元素(已排序)大于新元素,将该元素移到下一位置
     8 
     9 4.重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
    10 
    11 5.将新元素插入到该位置后
    12 
    13 6.重复步骤2~5
    14 
    15 */
    16 #include <stdio.h>
    17 
    18 
    19 // 分类 -------------- 内部比较排序
    20 
    21 // 数据结构 ---------- 数组
    22 
    23 // 最差时间复杂度 ---- 最坏情况为输入序列是降序排列的,此时时间复杂度O(n^2)
    24 
    25 // 最优时间复杂度 ---- 最好情况为输入序列是升序排列的,此时时间复杂度O(n)
    26 
    27 // 平均时间复杂度 ---- O(n^2)
    28 
    29 // 所需辅助空间 ------ O(1)
    30 
    31 // 稳定性 ------------ 稳定
    32 
    33 
    34 
    35 void InsertSort( int A[], int n )
    36 {
    37     int i, j, get;
    38     for( i = 0; i < n; i++ )    // 类似抓扑克牌排序
    39     {
    40         get = A[i+1];           // 右手抓到一张扑克牌
    41         j = i;                  // 拿在左手上的牌总是排序好的
    42         while( j >= 0 && A[j] > get )     // 将抓到的牌与手牌从右向左进行比较
    43         {
    44             A[j+1] = A[j];       // 如果该手牌比抓到的牌大,就将其右移
    45             j--;
    46         }
    47         A[j+1] = get;           // 直到该手牌比抓到的牌小(或二者相等),将抓到的牌插入到该手牌右边(相等元素的相对次序未变,所以插入排序是稳定的)
    48     }
    49 }
    50 
    51 int main()
    52 {
    53     int A[] = { 8, 5, 2, 6, 9, 3, 1, 4, 0, 7 }; // 从小到大插入排序
    54     int n = sizeof(A) / sizeof(int);
    55     
    56     InsertSort( A, n );
    57     
    58     int i;
    59     printf("插入排序结果:");
    60     for( i = 0; i < n; i++ )
    61     {
    62         printf("%d ", A[i]);
    63     }
    64     printf("\n");
    65     
    66     return 0;
    67 }
  • 相关阅读:
    iptables详解
    Linux文件结构及基本文件夹
    linux的一些常用命令
    Sql Server REPLACE函数的使用
    MSSQL复制表操作
    MSSQL2005数据库显示单一用户模式,无法进行任何操作
    linux下查看所有用户及所有用户组
    SpringMVC基础-10-拦截器
    SpringMVC基础-09-文件上传(单文件、多文件上传)
    SpringMVC基础-08-数据转换 & 数据格式化 & 数据校验
  • 原文地址:https://www.cnblogs.com/itsad/p/7865841.html
Copyright © 2011-2022 走看看