插入排序(Insertion Sort)

一,插入排序算法分析

插入排序算法有种递归的思想在里面,它由N-1趟排序组成。初始时,只考虑数组下标0处的元素,只有一个元素,显然是有序的。

然后第一趟 对下标 1 处的元素进行排序,保证数组[0,1]上的元素有序;

第二趟 对下标 2 处的元素进行排序,保证数组[0,2]上的元素有序;

…..

…..

第N-1趟对下标 N-1 处的元素进行排序,保证数组[0,N-1]上的元素有序,也就是整个数组有序了。

它的递归思想就体现在:当对位置 i 处的元素进行排序时,[0,i-1]上的元素一定是已经有序的了。

例如:40 80 45 30 20 70
第一轮:40 80 45 30 20 70 —> 40 80 45 30 20 70 i=1
第二轮:40 80 45 30 20 70 —> 40 45 80 30 20 70 i=2
第三轮:40 80 45 30 20 70 —> 30 40 45 80 20 70 i=3
第四轮:40 80 45 30 20 70 —> 20 30 40 45 80 70 i=4
第五轮:40 80 45 30 20 70 —> 20 30 40 45 70 80 i=5

例如:
这里写图片描述

template<typename T>
void selectionSort(T arr[], int n)
{

    for (int i = 0; i < n; i++)
    {

        int minIndex = i;
        for (int j = i + 1; j < n; j++)
            if (arr[j] < arr[minIndex])
                minIndex = j;

        swap(arr[i], arr[minIndex]);
    }
}

优化

template<typename T>
void insertionSort(T arr[], int n)
{
    // 寻找元素arr[i]合适的插入位置
    for (int i = 1; i < n; i++)
    {
        T e = arr[i];
        int j;
        for (j = i; j > 0 && arr[j-1] > e; j--)
        {
            arr[j] = arr[j - 1];
        }
        arr[j] = e;
    }
}

参考博客1:https://www.cnblogs.com/hapjin/p/5517667.html
参考博客2:https://blog.csdn.net/llzk_/article/details/51628574

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值