首页 > 试题广场 >

直接插入排序在最好情况下的时间复杂度为

[单选题]

直接插入排序在最好情况下的时间复杂度为


  • O(log(n))
  • O(n)
  • O(nlog(n))
  • O(n^2)
问题:给定一个整数序列,按照从小到大的顺序(确切地说,是非递减的顺序)排列序列中的整数。
  • 输入:一个整数序列。
  • 输出:整数序列,其中的整数升序排列。

    插入排序的思想:插入排序是在一个已经有序的小序列的基础上,一次插入一个元素。当然,刚开始这个有序的小序列只有1个元素,就是第一个元素。比较是从有序序列的末尾开始,也就是想要插入的元素和已经有序的最大者开始比起,如果比它大则直接插入在其后面,否则一直往前找直到找到它该插入的位置。如果碰见一个和插入元素相等的,那么插入元素把***的元素放在相等元素的后面。所以,相等元素的前后顺序没有改变,从原无序序列出去的顺序就是排好序后的顺序,所以插入排序是稳定的。

    插入排序的C语言实现如下(a为数组首地址, size为数组中的元素个数):

    void insertion_sort(int *a, size_t size) { int i, j, t; for(i = 1; i < size; i++){
            t = a[i];
            j = i - 1; while(j >= 0){ if(a[j] > t){
                    a[j + 1] = a[j];
                } else break;
                j--;
            }
            j += 1;
            a[j] = t;
        }
    }

    插入排序的时间复杂度分析。在最坏情况下,数组完全逆序,插入第2个元素时要考察前1个元素,插入第3个元素时,要考虑前2个元素,……,插入第N个元素,要考虑前N - 1个元素。因此,最坏情况下的比较次数是1 + 2 + 3 + ... + (N - 1),等差数列求和,结果为N^2 / 2,所以最坏情况下的复杂度为O(N^2)。

    最好情况下,数组已经是有序的,每插入一个元素,只需要考查前一个元素,因此最好情况下,插入排序的时间复杂度为O(N)。

  • 发表于 2017-07-11 14:58:15 回复(1)
    最好的情况在元素正序的情况下 此时时间复杂度为O(n) 
    发表于 2021-05-11 16:34:35 回复(0)
    插入排序O(n^2)
    发表于 2019-08-30 15:23:02 回复(0)