十大基础排序 · 一 --- 直接插入排序(稳定)

本文介绍了直接插入排序的基本原理和实现过程,包括其稳定性的特点。通过详细分析和源码展示,帮助读者理解这一基础排序算法。
摘要由CSDN通过智能技术生成

1. 分析

/*1. 直接插入排序(InsertSort)
#时间复杂度:
    最好时间复杂度:O(n)
    平均时间复杂度:O(n^2)
    最坏时间复杂度:O(n^2)
#空间复杂度:O(1)
#应用场合:1.元素特别少;2.数组基本有序;

#分析: 1. 带排序 数组分成两部分
       2. 将无序数组的元素依次插入到有序数组中去
            2.1 保存无序的第一个;
            2.2 拿无序的第一个和有序的最后一个比较: 
                如果 小, 将有序元素依次向后移动到直到合适位置;
                如果 大,比较停止;
            2.3 处理下一个无序元素;
实现方法:循环嵌套
*/

2. 源码

void InsertSort(int *arr, int nLength)
{
    if(arr == NULL || nLength <= 0)
    {
        printf("InsertSort:invalid input!\n");
        return ;
    }

    int i,j;
    int temp ;
    for(i = 1 ; i < nLength-1; i++)
    {
        j = i-1; //有序数组的最后一个;
        temp = arr[i];//无序数组第一个

        //给temp元素找位置:找比temp小的元素;
        while(temp < arr[j] && j>=0)
        {
            arr[j+1] = arr[j]; //移动元素,好让temp有地方放
            j--;
        }//temp >= arr[i]

        //temp 放在找到元素后;
        arr[j+1] = temp;
    }
    return;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值