直接插入排序

参考视频

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

手写笔记理解代码

相关推荐
NiceCloud喜云2 小时前
Opus 4.8 的 Effort Control 怎么选:Low 到 Max 五档策略
android·java·大数据·前端·c++·python·spring
小羊在睡觉3 小时前
力扣84. 柱状图中最大的矩形
后端·算法·leetcode·golang·go
cjhbachelor3 小时前
c++继承
c++
3DVisionary3 小时前
蓝光三维扫描:医疗制造的精度焦虑怎么解
人工智能·算法·制造·蓝光三维扫描·医疗制造·三维检测·义齿检测
好评笔记3 小时前
机器学习面试八股——常用损失函数
人工智能·深度学习·算法·机器学习·校招
weixin_468466853 小时前
全局与局部注意力机制新手实战指南
人工智能·python·深度学习·算法·自然语言处理·transformer·注意力机制
肩上风骋3 小时前
C++14特性
开发语言·c++·c++14特性
_日拱一卒3 小时前
LeetCode:994腐烂的橘子
java·数据结构·算法·leetcode·深度优先
珂朵莉MM4 小时前
第七届全球校园人工智能算法精英大赛-算法巅峰赛产业命题赛第3赛季优化题--束搜索
人工智能·算法
Omics Pro5 小时前
首个!外源天然产物综合性代谢图谱
数据库·人工智能·算法·机器学习·r语言