C语言直接插入排序算法是什么

发布时间:2022-01-07 11:10:09 作者:柒染
来源:亿速云 阅读:128

这篇文章将为大家详细讲解有关C语言直接插入排序算法是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

1.算法模板

void InsertSort(SqList *L)
{
    int j;
    for (int i = 2; i <= L->length; i ++ ) {
        if (L->arr[i] < L->arr[i-1])
        {
            L->arr[0] = L->arr[i];  // 设置哨兵
            for (j = i - 1; L->arr[j] > L->arr[0]; j -- )
                L->arr[j + 1] = L->arr[j];
            L->arr[j + 1] = L->arr[0];
        }
    }
}

2.算法介绍

直接插入排序的基本思想是:对于一个长度为n的序列,从第2的元素开始,逐个向之前排好的序列中插入新元素(第1个元素可以视为一个长度为1的有序的子序列),从而得到一个长度为n的有序的序列。

算法的时间复杂度为O(n^2),最好的情况为待排序列本身就是有序的,只需要遍历一遍,时间复杂度为O(n),最坏的情况为逆序,时间复杂度为O(n*n),由于元素之间是逐个进行比较的,直接插入排序是一种稳定的排序算法。

3.实例

#include <iostream>
using namespace std;

const int N = 100;

typedef struct
{
    int arr[N];
    int length;
} SqList;

void InsertSort(SqList *L)
{
    int j;
    for (int i = 2; i <= L->length; i ++ ) {
        if (L->arr[i] < L->arr[i-1])
        {
            L->arr[0] = L->arr[i];  // 设置哨兵
            for (j = i - 1; L->arr[j] > L->arr[0]; j -- )
                L->arr[j + 1] = L->arr[j];
            L->arr[j + 1] = L->arr[0];
        }
    }
}

int main()
{
    SqList L;
    L.arr[1] = 50;
    L.arr[2] = 10;
    L.arr[3] = 90;
    L.arr[4] = 30;
    L.arr[5] = 70;
    L.arr[6] = 40;
    L.arr[7] = 80;
    L.arr[8] = 60;
    L.arr[9] = 20;
    L.length = 9;

    InsertSort(&L);
    for (int i = 1; i <= L.length; i ++ )
        cout << L.arr[i] << " ";

}

关于C语言直接插入排序算法是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

推荐阅读:
  1. C语言之归并排序算法
  2. C语言之递归排序算法

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c语言

上一篇:数据仓库的基本功能是什么

下一篇:Java操作redis设置第二天凌晨过期的解决方案是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》