zoukankan      html  css  js  c++  java
  • C++描述基础算法之直接插入排序

    由于此博文并不难,所以并不需要搬出C++特性的这些大山,所以就使用简单的C++代码描述了。^_^

    直接插入排序是一种简单的插入排序法,所以适用于少量数据的排序,直接插入排序是比较稳定的一种排序算法。

    其基本思想是:把待排序的纪录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的纪录插入完为止,得到一个新的有序序列。

    插入排序:时间复杂度O(n^2)

    直接插入排序是属于In-place sort(不占用额外内存或占用常数的内存),所以空间复杂度为O(1)。上一篇的冒泡排序同样如此

    In-place sort的优点在于,当需要大量数据排序时,占用内存非常少。

    步骤大概是这样的:

    1.从第一个元素开始,该元素可以认为已经被排序          代码中   key = arr[i];就是这个意思 
    2.取出下一个元素,在已经排序的元素序列中从后向前扫描
    3.如果该元素(已排序)大于新元素,将该元素移到下一位置
    4.重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
    5.将新元素插入到该位置后
    6.重复步骤2~5

    下面的图是动画演示,同样是从度娘那儿讨来的,毕竟自己不会做这种图。。。。

     1 #include <iostream>
     2 
     3 using namespace std;
     4 
     6 //// 写法1
     7 void insertSort_0(int arr[], int length)
     8 {
     9     int i, j, key;
    10     for (i = 1; i < length; i++){
    11         key = arr[i];
    12         for (j = i - 1; j >= 0; j--){
    13             if (arr[j] > key) {
    14                 arr[j + 1] = arr[j];
    15             }
    16             else
    17                 break;
    18         }
    19         arr[j + 1] = key;
    20     }
    21 }
    22 
    23 //// 写法2
    24 void insertSort_1(int arr[], int length)
    25 {
    26     int j, key;
    27     for (int i = 1; i < length; i++){
    28         key = arr[i];
    29         j = i - 1;
    30         while (j >= 0 && arr[j] > key){
    31             arr[j + 1] = arr[j];
    32             j--;
    33         }
    34         arr[j + 1] = key;
    35     }
    36 }
    37 
    38 
    39 
    40 int main()
    41 {
    42     int iArr[] = { 7, 8, 9, 5, 2, 0, 12, 6 };
    43     int len = sizeof iArr / sizeof(iArr[0]);
    44 
    45     cout << "排序前:";
    46     for (int i = 0; i < len; i++)    {
    47         cout <<  iArr[i] << " ";
    48     }
    49 
    50     cout << "
    排序后:";
    51     insertSort_0(iArr, len);
    52     for (int j = 0; j < len; j++)    {
    53         cout << iArr[j] << " ";
    54     }
    55     cout << endl;
    56 
    57     system("pause");
    58     return 0;
    59 }
     
  • 相关阅读:
    Beyond_Compare 4.2.3中文版下载及密钥(亲测可用)
    ORA-0131:Insufficient privileges(Oracle授予用户DEBUG权限)
    常见正则表达式
    MySQL导入导出SQL文件(txt文件)
    存储过程(总结)
    怎样优化数据更新、访问量大的数据库(总结)
    索引原理(平衡树数据结构)
    Oracle面试题
    Linux系统没有IP地址
    iwlist/iwconfig/iw命令
  • 原文地址:https://www.cnblogs.com/XavierJian/p/5775321.html
Copyright © 2011-2022 走看看