千家信息网

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

发表于:2025-02-08 作者:千家信息网编辑
千家信息网最后更新 2025年02月08日,这篇文章将为大家详细讲解有关C语言直接插入排序算法是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.算法模板void InsertSort(Sq
千家信息网最后更新 2025年02月08日C语言直接插入排序算法是什么

这篇文章将为大家详细讲解有关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 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语言直接插入排序算法是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

0