• 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 }
     
  • 相关阅读:
    physicsbased animation阅读计划
    读代码的一点感想
    Paired Joint Coordinates
    坐标变换
    ADO.NET用法示例
    希腊字母读法
    数据库系统概论(第三版)学习笔记
    在网页里让文本框只能输入数字的一种方法。外加回车换Tab (javascript key键的使用)+禁止切换输入法转
    常用的一些javascript小技巧
    在.NET2.0中上传文件操作(解决了上传文件大小和多文件限制)转
  • 原文地址:https://www.cnblogs.com/XavierJian/p/5775321.html
Copyright © 2020-2023  润新知