插入排序算法

插入排序算法

插入排序是最简单的一种排序算法,它的核心思想即在于首先得到一个已经排好序的序列,然后从这个排好的序列后面开始与前面序列的各个数字进行比较,升序排序情况下,如果这个数字比它大,那么就把这个数字放到后面去,如果前面的这个数字比它小,由于前面的数字都已经是排好了的序列,因此前面的数字必定都比这个数字小,所以此时循环就可以终止了,直接用break跳出,源代码如下

void Sort::insertionSortDescend()
{
    int key;
    for (int i = 1; i < 10; i++)
    {
        key = a[i];
        int j;
        for (j = i - 1; j >= 0; j--) {
            //if this number is less than the present number, put it back
            if (a[j] < key)
            {
                a[j + 1] = a[j];
            }
            else
                break;
        }
        a[j + 1] = key;
    }
}
void Sort::insertionSortAscend()
{
    int key;
    for (int i = 1; i < 10; i++) {
        key = a[i];
        int j;
        for (j = i - 1; j >= 0; j--) {
            if (a[j] > key)
            {
                a[j + 1] = a[j];
            }
            else
                break;
        }
        a[j + 1] = key;
    }
}
  • 复杂度分析
    • 最好的情况
      在最好的情况下,该序列即为已经排好序的,不需要进行交换,其运行时间即为每条语句执行的时间,共执行了n-1次,因此其时间复杂度为 θ(n) θ ( n )
    • 最坏的情况
      最坏的情况,即为该序列为反着排序的,每一次都需要进行交换,因此是一个双重循环,其交换的总次数为 n(n1)/21 n ( n − 1 ) / 2 − 1 因此此时其时间复杂度为 θ(n2) θ ( n 2 )
    • 平均情况
      时间复杂度为 θ(n2) θ ( n 2 )
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值