首页 > 其他分享 >直接插入排序

直接插入排序

时间:2023-07-25 10:34:34浏览次数:33  
标签:10 temp int 插入排序 ++ key 直接 define

本文章的代码使用jetbrains公司旗下的的Clion编写,操作系统位macOS Ventura(13.2.1). 代码没有在dev-c++测试过(dev-c++可能会有相关的空格问题)

#define Max 100
#define before  printf("排序前")
#define after   printf("排序后")
#define newline printf("\n")
#define print   printf("%6d", R[i].key)
#define printA  printf("%6d",A[i])
#define Array int A[]={5,7,2,5,9,6,42,1,67,2,3};


//直接插入算法是一种最简单的插入算法,其过程是依次讲每个元素插入到一个有序的序列中
#include "stdio.h"

typedef struct {
    int key ;
    int data;  //对于排序来说,这个data并没有起到任何作用
}SqType;


//直接插入排序每趟产生的有序区并不一定是全局有序区,也就是说有序区的元素并不一定放在最终的位置,当一个元素在整个排序结束之前就已经=放在其最终的位置,称为归位
//数据结构上的算法,对相关数据测试的时候需要将相关的数据送入结构体的key,对于key和相关的data 也没有使用别名
void insertSort(SqType R[] ,int n){
    int i,j;
    SqType temp;
    for (i = 1; i < n; i++) {
        if (R[i - 1].key > R[i].key) {
            temp = R[i];
            j = i - 1;
            do {
                R[j + 1] = R[j];
                j--;
            } while (j >= 0 && R[j].key > temp.key);
            R[j + 1] = temp;
        }
    }
}

// 直接插入排序优化后的函数
void insertSort_1(int A[], int n) {
    for (int i = 1; i < n; i++) {
        if (A[i - 1] > A[i]) { // 如果当前元素比前一个元素小,则需要将当前元素插入到有序区中
            int temp = A[i]; // 将当前元素存储在临时变量temp中
            int j = i - 1; // j用于在有序区中寻找插入位置
            // 在有序区中寻找插入位置,同时将大于temp的元素向右移动一位
            while (j >= 0 && A[j] > temp) {
                A[j + 1] = A[j]; // 将元素向右移动一位
                j--;
            }
            A[j + 1] = temp; // 将当前元素放置在正确的位置上
        }
    }
}



int  main(){
    SqType R[Max];
    Array;
    for (int i = 0; i < 10; i++)
        R[i].key = A[i];
before;
    for (int i = 0; i < 10; i++)
        print;
newline;
    insertSort(R,10);
after;
    for (int i = 0; i < 10; i++)
        print;
newline;
    insertSort_1(A,10);
after;
    for (int i = 0; i < 10; i++)
        printA;
}

相关的测试结果如下

标签:10,temp,int,插入排序,++,key,直接,define
From: https://www.cnblogs.com/xiaozhounandu/p/17579111.html

相关文章

  • Windows子系统(WSL)通过桥接网络实现被外部局域网主机直接
    实现方法思路就是将wsl2自建的虚拟NAT网络桥接到windows主机网卡上,主要参考这篇文章 1、开启hyper-v桥接功能需要windows的hyper-v组件支持,但是win10/11家庭版是不包含hyper-v的,专业版才包含。网上也有文章提到家庭版安装hyper-v的方法,但是我没有测试,以下内容都是在win11专业......
  • 工作必备的八款神仙办公软件,工作效率直接起飞
    今天给大家分享几款工作必备的神仙办公软件,能让你的工作效率直接起飞。1、PdfMerger——PDF合并器PdfMerger是一款非常轻量的PDF合并器软件,它的大小连1MB都不到,却可以将多个PDF文档合并为一个文档,工具使用也是非常简单,界面就两个按钮,一个“添加文件”,一个“开始合并”,只需按照顺序......
  • 工作必备的八款神仙办公软件,工作效率直接起飞
    今天给大家分享几款工作必备的神仙办公软件,能让你的工作效率直接起飞。 1、PdfMerger——PDF合并器 PdfMerger是一款非常轻量的PDF合并器软件,它的大小连1MB都不到,却可以将多个PDF文档合并为一个文档,工具使用也是非常简单,界面就两个按钮,一个“添加文件”,一个“开始合并”,只需......
  • js直接下载PDF
    1、前端引入js <scripttype="text/javascript"src="${pageContext.request.contextPath}/modules/util/downDoc/html2pdf.js"></script>2、js方法html定义div$("#downPrint").click(function(){exportPdf();}......
  • 编写APP直接访问EEPROM
    编写APP直接访问EEPROM参考资料:Linux驱动程序:drivers/i2c/i2c-dev.cI2C-Tools-4.2:https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/AT24cxx.pdf本节源码:GIT仓库中doc_and_source_for_drivers\IMX6ULL\source\04_I2C\01_at24c02_testdoc_and......
  • 解决tyopora传图片到博客园的问题(本地图片无法直接复制)
    1.问题我们这里的是本地路径,但我们需要html路径解决方法见https://www.bilibili.com/video/BV1Rv4y1Y7KH?p=5&vd_source=f6ddd7329bd73c42abb316ba2331ff7b2.解决方法dotnet-cnblogproc-f1.启用.NET...3.5服务2.安装指定文件3.管理员身份打开终端配置1.博客ID2.......
  • 解决element ui 下拉框表单验证切换选项就直接触发的问题
    elementui下拉框表单验证正确使用步骤1.确保form组件的:model属性绑定了表单的数据对象  2.确保form组件的rules绑定了对应的rule 3.确认要验证的表单item绑定了对应的prop属性注意:prop属性的名称要和rule里面的名称一样并且和v-model的属性名称一样才行 完成以上......
  • Python中字符串可以直接用大于号小于号吗
    Python中字符串可以直接用大于号小于号吗在Python中,字符串是一种不可变的数据类型。我们可以使用双引号或单引号来定义字符串,比如"HelloWorld"或'Pythonisawesome'。字符串在Python中非常常用,因为它们可以包含文本和字符数据。但是,对于字符串来说,我们不能直接使用大于号(>)和小......
  • m根据给定系统传递函数自动绘制系统结构图matlab仿真,包括直接型,级联型以及并联型
    1.算法仿真效果matlab2022a仿真结果如下:2.算法涉及理论知识概要在控制系统分析和设计过程中,传递函数是一个重要的概念。通过传递函数,我们可以快速地分析系统的稳定性、响应特性等。同时,根据系统传递函数自动绘制系统结构图是一项非常有价值的技术,它可以帮助工程师更好地理......
  • m根据给定系统传递函数自动绘制系统结构图matlab仿真,包括直接型,级联型以及并联型
    1.算法仿真效果matlab2022a仿真结果如下:   2.算法涉及理论知识概要         在控制系统分析和设计过程中,传递函数是一个重要的概念。通过传递函数,我们可以快速地分析系统的稳定性、响应特性等。同时,根据系统传递函数自动绘制系统结构图是一项非常有价值的技......