直接插入排序

参考视频

直接插入排序代码(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;
    }
}

手写笔记理解代码

相关推荐
2401_891482172 小时前
多平台UI框架C++开发
开发语言·c++·算法
88号技师3 小时前
2026年3月中科院一区SCI-贝塞尔曲线优化算法Bezier curve-based optimization-附Matlab免费代码
开发语言·算法·matlab·优化算法
t198751283 小时前
三维点云最小二乘拟合MATLAB程序
开发语言·算法·matlab
无敌昊哥战神3 小时前
【LeetCode 257】二叉树的所有路径(回溯法/深度优先遍历)- Python/C/C++详细题解
c语言·c++·python·leetcode·深度优先
㓗冽3 小时前
8皇后·改-进阶题16
数据结构
x_xbx3 小时前
LeetCode:148. 排序链表
算法·leetcode·链表
Darkwanderor3 小时前
三分算法的简单应用
c++·算法·三分法·三分算法
2401_831920744 小时前
分布式系统安全通信
开发语言·c++·算法
WolfGang0073214 小时前
代码随想录算法训练营 Day17 | 二叉树 part07
算法
温九味闻醉4 小时前
关于腾讯广告算法大赛2025项目分析1 - dataset.py
人工智能·算法·机器学习