直接插入排序

参考视频

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

手写笔记理解代码

相关推荐
十五年专注C++开发5 小时前
fatal error C1189: #error: WinSock.h has already been included 的解决方案
c++·socket·boost
KJ_BioMed6 小时前
从PDB到高亲和力分子:De novo生成式计算化学Pipeline剖析
算法·生物医药·生物科研·科研干货·化合物设计
一个王同学6 小时前
从零到一 | CV转多模态大模型 | week17 | LLM 推理优化 & vLLM 详解
人工智能·深度学习·算法·机器学习·计算机视觉·vllm
jimy17 小时前
C语言模拟对象、方法:“函数指针+结构体“复用函数指针指向的函数体
c语言·开发语言
三品吉他手会点灯7 小时前
嵌入式机器学习 - 学习笔记1.1.1 - 什么是机器学习?
c语言·人工智能·笔记·嵌入式硬件·学习·机器学习
旖-旎8 小时前
《LeetCode 53 最大子数组和 || LeetCode 918 环形子数组的最大和》
c++·算法·leetcode·动态规划
变量未定义~8 小时前
单调栈+倍增思想 皇家守卫【算法赛】、单调队列 附近最小
算法
QN1幻化引擎8 小时前
给 AI 做一次「意识体检」——基于 QN1 幻化引擎的灵鉴意识识别框架与 DalinX V5 实测
大数据·数据结构·人工智能·算法·架构
拂拉氏8 小时前
【知识讲解】 AVL树从基本成员的介绍到核心接口的实现(插入、判断、删除等等)
数据结构·算法·avl树
小樱花的樱花8 小时前
Linux 线程的创建
linux·c语言·开发语言