直接插入排序

参考视频

直接插入排序代码(C/C++实现) 细到爆炸!_哔哩哔哩_bilibili

直接插入排序代码(C/C++实现) 细到爆炸!_哔哩哔哩_bilibili

核心思想:

将有序部分的最后一个和无序数组的第一个比较,如果下于则插入到合适的位置;如果大于,则扩充有序数组

6-12 直接插入排序

分数 20

作者 启迪-数据结构教研组

单位 广西科技大学

利用直接插入排序算法,将顺序表L中的元素从小到大进行排序。

函数接口定义:

复制代码
void InsertionSort(List L);

其中 List 结构定义为:

复制代码
struct LNode{
    int Data[MAXSIZE];  //Data为待排序序列数组 
    int Last;  //Last为最后一个元素的数组下标 
}; 
typedef struct LNode *List; 

裁判测试程序样例:

复制代码
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 1000

struct LNode{
    int Data[MAXSIZE];  //Data为待排序序列数组 
    int Last;  //Last为最后一个元素的数组下标 
}; 
typedef struct LNode *List; 

void InsertionSort(List L); 

List Create()
{
    List L;
    L = (List)malloc(sizeof(struct LNode));
    int j = 0,ch; 
    
    /*输入待排序序列,输入 ctrl+Z 结束*/
    while(scanf("%d",&ch)!=EOF)
    { 
        L->Data[j] = ch;
        j++;
    }
    L->Last = j-1;
    return L;
}

int main()
{
    int i;
    List L = Create();

    InsertionSort(L);    
        
    for(i=0;i<=L->Last;i++)
        printf("%d ",L->Data[i]);
    
    return 0;
} 
/* 请在这里填写答案 */

输入样例:

复制代码
99 66 45 33 37 10 22 13

输出样例:

复制代码
10 13 22 33 37 45 66 99 

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

C (gcc)

复制代码
void InsertionSort(List L) {
    int i, j, temp;
    // 外层循环:无序区间的起始位置 i,从 1 开始(第一个元素默认有序)
    for (i = 1; i <= L->Last; i++) {
        // 取出无序区间的第一个元素
        temp = L->Data[i];
        // 初始化 j 为有序区间最后一个元素的下标
        j = i - 1;
        
        // 改用 do-while 循环实现元素后移
        if (j >= 0) { // 先判断 j 不越界,避免 do-while 直接执行导致数组越界
            do {
                // 元素后移,为 temp 腾出位置
                L->Data[j + 1] = L->Data[j];
                j--; // 向前移动指针,继续比较
            } while (j >= 0 && L->Data[j] > temp); // 满足条件则继续循环
        }
        
        // 将 temp 插入到正确位置
        L->Data[j + 1] = temp;
    }
}

手写笔记理解代码

相关推荐
2601_949146539 小时前
C语言语音通知接口接入教程:如何使用C语言直接调用语音预警API
c语言·开发语言
你撅嘴真丑9 小时前
第九章-数字三角形
算法
在路上看风景9 小时前
19. 成员初始化列表和初始化对象
c++
uesowys9 小时前
Apache Spark算法开发指导-One-vs-Rest classifier
人工智能·算法·spark
zmzb01039 小时前
C++课后习题训练记录Day98
开发语言·c++
ValhallaCoder9 小时前
hot100-二叉树I
数据结构·python·算法·二叉树
董董灿是个攻城狮9 小时前
AI 视觉连载1:像素
算法
念风零壹10 小时前
C++ 内存避坑指南:如何用移动语义和智能指针解决“深拷贝”与“内存泄漏”
c++
智驱力人工智能10 小时前
小区高空抛物AI实时预警方案 筑牢社区头顶安全的实践 高空抛物检测 高空抛物监控安装教程 高空抛物误报率优化方案 高空抛物监控案例分享
人工智能·深度学习·opencv·算法·安全·yolo·边缘计算
孞㐑¥10 小时前
算法——BFS
开发语言·c++·经验分享·笔记·算法