• 基本排序之插入排序


    插入排序:

    概述:

    (1) 把第一个元素看成一个已排序的元素(因为只有一个,所以可以看成已经排序好的)。

    (2)用第二个元素和第一个元素比较,如果第二个元素小于第一个元素,那么进行交换。

      用第三个元素和第二个元素比较,如果第三个元素小于第二个元素,那么进行交换。

         交换完毕之后再看,现在的第二个元素是否小于第一个元素,如果小于,那么进行交换。

         以此类推,直至最后一个元素。

    (3)碰到第一个不大于此元素的数时,就不继续往前。

    就和玩扑克牌一样,先拿一张手牌放着,抽第二张牌的时候,如果比第一张小,那么就放在第一张之前。

    再继续抽第三张,如果比第二张小,就往前再比较,如果比第一张小,那么再往前,放在第一张位置处。如果比第一张大,那就停住,放在第二张的地方。

    以此类推。

    稳定性:

    稳定算法。

    时间复杂度:

    如果一个数组是逆序,那么使用插入排序的话,下标i要进行i次的交换,所以最坏的时间复杂度就是(N-1)+(N-2)+...+2+1=N(N-1)/2,故时间复杂度为O(N²)。

    代码:

    #include <iostream>
    using namespace std;
    
    template<typename T>
    void InsertSort(T array[],int length)
    {
        //如果数组为空或者只有一个元素,那么直接返回这个数组即可
        if (length < 2)
            return;
        int i = 0,j = 0;
        //从下标为1的元素开始比较
        for (i = 1; i < length; i++)
        {
            //如果当前元素小于上一个元素,那么就进行交换,并继续比较
            //直到当前元素为下标为0(所以要大于等于1,)
            for (j = i; j >= 1 && array[j] < array[j-1]; j--)
            {
                int temp = array[j];
                array[j] = array[j - 1];
                array[j - 1] = temp;
            }
        }
    }
    
    
    int main()
    {
        int array[10] = {2,54,23,-19,4,0,-12,-1,5,2};
        InsertSort(array, 10);
        for (int i = 0; i < 10; i++)
        {
            cout << array[i] << " ";
        }
        return 0;
    }
  • 相关阅读:
    Effective C# 学习笔记(三十五) 了解PLINQ如何实现并行算法
    Effective C# 学习笔记(三十八)理解Dynamic的得与失
    转单例的分析
    获取系统当前音量 和 监听系统音量 ios
    (转) iphone开发资源汇总
    xcode show line numbers
    为了编程方便的效率宏定义的一些代码
    ios6下cocos2d & ipad 调用摄像头报错问题 (在竖屏情况下调用Camera 会导致转屏)
    转KVC
    不记住的
  • 原文地址:https://www.cnblogs.com/love-jelly-pig/p/8343374.html
Copyright © 2020-2023  润新知