笔记一(算法基础)

本文是阅读《算法导论》的读后笔记。

1 插入排序

       输入:n个数得一个序列<a1, a2, a3, a4, ... , an>

       输出:按照值的升序排列输出


插入排序简介:

       这是一个对于少量元素很有效的算法。就像玩扑克牌一样,将整个输入序列划分成两个序列,前段有序序列和后段无序序列。前段有序序列初始时只有一个元素。在每一趟排序的中,从后面无序序列中抽出第一个插入到前段有序的序列中。重复知道完成排序。

伪代码实现:

       我们将伪代码实现命名为INSERT-SORT,其中的参数是一个n个输入元素组成数组 A[1..n]。元素的个数用 A.length 表示。

INSERT-SORT(A)
   for j = 2 to A.length
        key = A[j]      
        i = j - 1
       while i > 0 and A[i] > key
                A[i+1] = A[i]
                i = i - 1
       A[i+1] = key

C代码实现:

void insertSort(int a[], int length){
    for (int i=1; i<length; i++) {
        int key = a[i];
        int j = i - 1;
        while (a[j] > key && j >= 0) {
            a[j+1] = a[j];
            j--;
        }
        a[j+1] = key;
    }
}

       插入排序效率分析:

       时间复杂度:最好的情况是所排序的本身就是有序的,此时只需要比较不需要移动,需要比较 n-1 次。故时间复杂度为 O(n)。

                             最坏的情况当让是本身是逆序的,此时既需要比较又需要移动。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值