直接插入排序

参考视频

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

手写笔记理解代码

相关推荐
执携25 分钟前
算法 -- 冒泡排序
数据结构·算法
寻星探路42 分钟前
【算法专题】滑动窗口:从“无重复字符”到“字母异位词”的深度剖析
java·开发语言·c++·人工智能·python·算法·ai
我叫袁小陌1 小时前
C++多线程全面详解
开发语言·c++
wen__xvn1 小时前
代码随想录算法训练营DAY14第六章 二叉树 part02
数据结构·算法·leetcode
Ka1Yan1 小时前
[数组] - 代码随想录(2-6)
数据结构·算法·leetcode
m0_748250032 小时前
C++ 官方文档与标准
开发语言·c++
漫随流水2 小时前
leetcode算法(104.二叉树的最大深度)
数据结构·算法·leetcode·二叉树
matlabgoodboy2 小时前
程序代做python代编程matlab定制代码编写C++代写plc设计java帮做
c++·python·matlab
机器学习之心HML2 小时前
鲸鱼算法(WOA)优化Kriging模型
算法
DYS_房东的猫3 小时前
《 C++ 零基础入门教程》第6章:模板与 STL 算法 —— 写一次,用万次
开发语言·c++·算法