栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

直接插入排序

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

直接插入排序

思想:每次将一个待排序的数据按照大小插入到前面已经排好序的适当位置,直到全部数据插入完成为止。

图解:有哨兵的情况

 

 

代码:
//直接插入排序(不带哨兵)
void insertsort(int A[], int n) {//排序49,38,65,97,76,13,27,49
    int i, j, temp;
    for (i = 1; i < n; i++) //从第二个元素开始与第一个元素比较,一直比到第n个元素(下标为n-1)
        if (A[i] < A[i - 1]) {
            temp = A[i];//后面的元素小于前面的元素,将后一个元素提出来赋给temp
            for (j = i - 1; j >= 0 && A[j] > temp; j--)//从后往前找插入位置
                A[j + 1] = A[j];//使用for循环将大于temp前面的元素依次往后挪
            A[j + 1] = temp;
            //临界情况是挪完数后,j--,j目前指向第一个大于temp的数,这时把temp给j后面的一个元素,刚好是一个空位
    }
    
}
//直接插入排序(带哨兵)
void insertsort(int A[], int n) {
    int i, j;
    for(i=2;i<=n;i++)//第二个元素下标为2,第n个元素下表为n,要加等于号
        if (A[i] < A[i - 1]) {
            A[0] = A[i];//若A[i]的值小于前驱,把它放到A[0]位置
            for (j = i - 1; A[j] > A[0]; j--) {//把大于A[0]的值的元素往后挪
                A[j + 1] = A[j];
                A[j + 1] = A[0];//复制到插入位置
            }
        }
}

哨兵的优点是不用每轮循环都判断j大于等于0。。

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/889789.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号