• 直接插入排序


    思想

       首先要明确的是,已排序序列在前,待排序序列在后,第一轮的待排序序列就是整个序列,每一轮将待排序序列中的首位元素插入到已排序序列的合适位置处,待排序序列元素个数减1,已排序序列元素个数加1,直到插完所有元素

    代码实现

    void sortInsert(vector<int> &nums) 
    {
    int n = nums.size(); for (int i = 1; i <= n - 1; ++i) { int j = i; int temp = nums[i]; while (j > 0 && temp < nums[j - 1])//已排序序列的最后一个元素是最大的,从已排序序列的最后一个开始往前进行两两比较,最后形成的效果就好像找到了一个合适的位置插入一样 { // swap(nums[j], nums[j - 1]); nums[j] = nums[j-1]; --j; } nums[j] = temp; } }

    时间复杂度

      最好情况:O(n),本身有序时只需比较n-1次

      最坏情况O(n2),平均情况O(n2)

    空间复杂度

       O(1)

    稳定性

      交换没有跳跃性,可以保证相等元素的排序前后的相对顺序不会改变,所以是稳定的

  • 相关阅读:
    Django之Models(一)
    数据库学习之事务
    pymysql的使用
    pymysql:Mysql拒绝从远程访问的解决办法
    Django之模板基础
    Django之视图函数总结
    POJ1942
    poj2115[扩展欧几里德]
    POJ1850&&POJ1496
    [Catalan数]1086 栈、3112 二叉树计数、3134 Circle
  • 原文地址:https://www.cnblogs.com/Joezzz/p/9647645.html
Copyright © 2020-2023  润新知