zoukankan      html  css  js  c++  java
  • 排序算法总结:二、插入排序

    先说一下比较排序的定义吧:

    比较排序的定义

    就是除了赋值操作外, 只存在小于‘<’和大于‘>’这两种运算符是仅有的允许对
    输入数据进行的操作。

    插入排序的性质

      • 插入排序是一种比较排序
      • 将一个数组分为两部分,前面为排好序的部分,后面为未排序的部分
      • 将未排序部分的元素逐个插入到已排好序部分的正确位置上
      • 就像扑克牌按顺序排列,原先 2,4,5 和 10 都排好序了,现在需要为 7 找到正确的位置

    时间复杂度

    • 运行时间为 T(N) = O(N^2)
    • 平均运行时间为 T(N) = Θ(N^2)。

    代码实现

     1 #include 
     2  
     3 typedef int ElementType;
     4 void InsertionSort(ElementType A[], int N);
     5  
     6 void main(void)
     7 {
     8     int i;
     9     int unordered[] = {4, 5, 2, 1, 0};
    10     InsertionSort(unordered, 5);
    11     for(i = 0; i &lt; 5; i++)
    12     {
    13         printf("%d
    ", unordered[i]);
    14     }
    15 }
    16  
    17 //双重循环,时间复杂度为T(N)=O(N^2)
    18 void InsertionSort(ElementType A[], int N)
    19 {
    20     int j, p;
    21  
    22     ElementType Tmp;
    23     for(p = 1; p < N; p++)
    24     {
    25         Tmp = A[p];
    26         for(j = p; j > 0 && A[j - 1] > Tmp; j--)
    27         {
    28             A[j] = A[j - 1];
    29         }
    30         A[j] = Tmp;
    31     }
    32 }

    排序过程演示

    排序数组 5, 2, 4, 6, 1, 3 的过程:

  • 相关阅读:
    Freemarker-2.3.22 Demo
    Freemarker-2.3.22 Demo
    Freemarker-2.3.22 Demo
    Freemarker-2.3.22 Demo
    Oracle PLSQL Demo
    Oracle PLSQL Demo
    Oracle PLSQL Demo
    Oracle PLSQL Demo
    Oracle PLSQL Demo
    Oracle PLSQL Demo
  • 原文地址:https://www.cnblogs.com/liupengblog/p/4648983.html
Copyright © 2011-2022 走看看