第十五周项目四 验证算法——直接插入排序

南京邮电大学数据结构实验四(各种排序算法) 阅读详情

问题及代码:

/*       
*烟台大学计算机与控制工程学院        
*作    者:孙丽玮       
*完成日期:2016年12月9日    
*问题描述:用序列{57,40,38,11,13,34,48,75,6,19,9,7}作为测试数据,运行并本周视频中所讲过的算法对应程序,观察运行结果并深刻领会算法的思路和实现方法。
          (1)直接插入排序;(2)希尔排序;(3)冒泡排序;(4)快速排序;(5)直接选择排序;(6)堆排序;(7)归并排序;(8)基数排序。 
*/   

1、直接插入排序

#include <stdio.h>
#define MaxSize 20
typedef int KeyType;    //定义关键字类型
typedef char InfoType[10];
typedef struct          //记录类型
{
    KeyType key;        //关键字项
    InfoType data;      //其他数据项,类型为InfoType
} RecType;              //排序的记录类型定义

void InsertSort(RecType R[],int n) //对R[0..n-1]按递增有序进行直接插入排序
{
    int i,j;
    RecType tmp;
    for (i=1; i<n; i++)
    {
        tmp=R[i];
        j=i-1;            //从右向左在有序区R[0..i-1]中找R[i]的插入位置
        while (j>=0 && tmp.key<R[j].key)
        {
            R[j+1]=R[j]; //将关键字大于R[i].key的记录后移
            j--;
        }
        R[j+1]=tmp;      //在j+1处插入R[i]
    }
}

int main()
{
    int i,n=12;
    RecType R[MaxSize];
    KeyType a[]={57,40,38,11,13,34,48,75,6,19,9,7};
    for (i=0; i<n; i++)
        R[i].key=a[i];
    printf("排序前:");
    for (i=0; i<n; i++)
        printf("%d ",R[i].key);
    printf("\n");
    InsertSort(R,n);
    printf("排序后:");
    for (i=0; i<n; i++)
        printf("%d ",R[i].key);
    printf("\n");
    return 0;
}

运行结果:


2、显示直接插入排序过程

#include <stdio.h>
#define MaxSize 20
typedef int KeyType;    //定义关键字类型
typedef char InfoType[10];
typedef struct          //记录类型
{
    KeyType key;        //关键字项
    InfoType data;      //其他数据项,类型为InfoType
} RecType;              //排序的记录类型定义

void InsertSort(RecType R[],int n) //对R[0..n-1]按递增有序进行直接插入排序
{
    int i,j,k;
    RecType tmp;
    for (i=1; i<n; i++)
    {
        tmp=R[i];
        j=i-1;            //从右向左在有序区R[0..i-1]中找R[i]的插入位置
        while (j>=0 && tmp.key<R[j].key)
        {
            R[j+1]=R[j]; //将关键字大于R[i].key的记录后移
            j--;
        }
        R[j+1]=tmp;      //在j+1处插入R[i]
        printf("i=%d: ",i);
        for (k=0; k<n; k++)
            printf("%d ",R[k].key);
        printf("\n");
    }
}

int main()
{
    int i,n=12;
    RecType R[MaxSize];
    KeyType a[]={57,40,38,11,13,34,48,75,6,19,9,7};
    for (i=0; i<n; i++)
        R[i].key=a[i];
    printf("排序前:");
    for (i=0; i<n; i++)
        printf("%d ",R[i].key);
    printf("\n");
    InsertSort(R,n);
    printf("排序后:");
    for (i=0; i<n; i++)
        printf("%d ",R[i].key);
    printf("\n");
    return 0;
}

运行结果:


3、折半插入排序

#include <stdio.h>
#define MaxSize 20
typedef int KeyType;    //定义关键字类型
typedef char InfoType[10];
typedef struct          //记录类型
{
    KeyType key;        //关键字项
    InfoType data;      //其他数据项,类型为InfoType
} RecType;              //排序的记录类型定义

void InsertSort1(RecType R[],int n) //对R[0..n-1]按递增有序进行直接插入排序
{
    int i,j,low,high,mid;
    RecType tmp;
    for (i=1; i<n; i++)
    {
        tmp=R[i];
        low=0;
        high=i-1;
        while (low<=high)
        {
            mid=(low+high)/2;
            if (tmp.key<R[mid].key)
                high=mid-1;
            else
                low=mid+1;
        }
        for (j=i-1; j>=high+1; j--)
            R[j+1]=R[j];
        R[high+1]=tmp;
    }
}

int main()
{
    int i,n=12;
    RecType R[MaxSize];
    KeyType a[]={57,40,38,11,13,34,48,75,6,19,9,7};
    for (i=0; i<n; i++)
        R[i].key=a[i];
    printf("排序前:");
    for (i=0; i<n; i++)
        printf("%d ",R[i].key);
    printf("\n");
    InsertSort1(R,n);
    printf("排序后:");
    for (i=0; i<n; i++)
        printf("%d ",R[i].key);
    printf("\n");
    return 0;
}

运行结果:


总结:

直接插入排序:每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。

折半插入排序:在直接插入排序的基础上,不用按顺序一次寻找插入的,可以采用折半查找的方法来加快寻找插入点的速度。

MOSFET热失效机理与保护电路设计:实战案例 深入解析MOSFET工作原理及其在高温下的失效机制,结合实际案例探讨有效保护电路设计,提升系统可靠性与安全性。 阅读详情

相关推荐

恒定跨导的奥秘:基于1:3电流镜的轨到轨运放输入级设计与仿真验证

本文深入探讨了基于1:3电流镜的轨到轨运放输入级设计,重点分析了恒定跨导(GM)的实现原理与仿真验证。通过精确的电流补偿机制和工艺参数优化,解决了传统运放在电源轨附近跨导下降的问题,为模拟集成电路设计提供了可靠的低电压解决方案。

weixin_33686714的博客 516

插入排序和选择排序

/** * 插入排序 * * @param a */ def insertionSort(a: Array[Int]): Unit = { for (i &lt;- 1 until a.length) { var j = i - 1 val current = a(i) while (j &gt;= 0 &amp...

Clarke 218

1.2 重叠因子:双重指数移动平均(Double Exponential Moving Average, DEMA)概念与Python实战

双重指数移动平均(Double Exponential Moving Average, DEMA)是一种改进的移动平均线指标,由Patrick Mulloy在1994年开发。相比传统的指数移动平均线(EMA),DEMA通过减少滞后性来提供更快的市场反应。它通过两次计算EMA并进行特殊组合来实现这一目标,可以在保持平滑性的同时减少滞后。

Kewin的博客 2168

算法实验室-15-插入排序

理解插入排序 什么是插入排序?这个问题得问链表,链表本身是拥有一个方法,叫insert(ListNode node)的函数 实现这个函数其实还是很简单的 //插入函数 public void insert(ListNode parent,ListNode value){ ListNode temp = parent.next; parent.next = value; value.next = temp; } 那么,拥有这个插

qq_37080133的博客 239

瑞萨RZN2L工业以太网开发避坑指南:EtherCAT从入门到通信调试全流程

本文详细解析了瑞萨RZN2L MPU在工业以太网开发中的EtherCAT从站配置与通信优化全流程。通过硬件设计关键点、协议栈选型、PDO映射策略及DC同步精度优化等实战技巧,帮助开发者快速搭建高效通信框架并解决调试中的常见问题,特别适合工业自动化领域的实时通信需求。

aitie1479的博客 461

Labview 机器视觉(4)之 图像处理进阶 - 动态ROI与批量保存

本文深入探讨了LabVIEW机器视觉中动态ROI与批量保存两大进阶技术。动态ROI通过模式匹配或粒子分析实现检测区域的自动追踪,解决了产品位置变化带来的挑战。同时,文章详细介绍了如何设计高效的文件命名规则与异步保存机制,以实现海量图像数据的批量保存与管理,从而构建稳定、高效的工业自动化检测系统。

weixin_29234423的博客 219

数据结构与算法课程笔记(十五)

实验十五 插入排序与选择排序一、 实验目的二、 实验环境三、 实验内容和步骤四、 小结 一、 实验目的 (1) 掌握直接插入、简单选择排序算法的思想; (2) 掌握各排序算法的程序实现。 二、 实验环境 Windows 7以上版本的操作系统,Visual Studio 2010以上版本编程环境。 三、 实验内容和步骤 根据直接插入排序和简单选择排序的算法思想,分别写出序列{30,20,50,40,25}的直接插入排序和简单选择排序的变化过程,并标示出每趟排序的有序区范围,然后使用目录sort下的文件sor

Motseturtle的博客 5902

Misc-RAR隐写

题目来自于:XCTF的SimpleRAR,由于涉及到许多新知识,所以写篇小文子记录一下。 一、下载完后是一个压缩包。 里面就有一个flag.txt,打开之后发现有一串字符是flag is not here,而且我们查看他的文件大小,只要十六字节,绝对不可能再藏着什么信息了。 然后把压缩包拉到010editor里面,发现一下子出来好多新的内容,很明显是有夹杂着的附加文件。 二、rar文件头信息。 rar 是由一个一个 block 组成的,每个 block 有以下几个部分 ...

admin的博客 1361

【数据结构】排序之插入排序和选择排序

排序是我们数据结构学习中很重要的章节,我们在生活中买东西都会挑选更好的,点外卖会选评分高的等等,这些都需要用到排序。接下来我们将会学习常见的排序算法。

小王又困了的博客 3935

【CloudCompare】Windows源码编译CloudCompare

本文详细介绍了在Windows环境下编译安装CloudCompare V2.12.0的过程。首先配置了PCL 1.14.1、CMake 3.30.6和QT 5.14.2开发环境,使用Visual Studio 2022工具集。然后下载源码并通过CMake进行配置,特别注意勾选PLUGIN_STANDARD_QPCL以支持PCD文件加载。最后在VS2022中编译安装,并指出Debug模式下可能遇到的VTK库后缀问题,需添加CMAKE_DEBUG_POSTFIX变量解决。整个流程涵盖了从环境搭建到最终编译成功的

yijiujiusan的博客 486

强化学习算法案例——一个经典的走迷宫任务。

作者:禅与计算机程序设计艺术 1.简介 在强化学习(Reinforcement Learning, RL)中,有一个经典的任务——走迷宫,其原理简单易懂,但它的实际意义却深远,它让计算机学习如何通过策略网络(policy network),以最佳的方式解决复杂的任务。本文将介绍如何用强化学习解决这个经典

AI天才研究院 3216

排序算法:插入排序(直接插入排序、希尔排序)

直接插入排序和希尔排序的详细实现过程以及图解和时间复杂度和各种排序算法的效率的测试,简单易上手,你也快来试试吧!

Yikefore的博客 1万+

瑞数jsvmp算法还原流程讲解

​ 又是很久没写文章了,今天水一篇文章吧,鉴于之前有看到过别人的文章被警告的案例,所以这篇文章就仅写一下还原瑞数vmp的大概流程吧(仅记录下自己还原的思路)

博客 6608

【第十五周项目1 - 验证算法之直接插入排序】

问题及代码: [cpp] view plain copy   /*   * Copyright (c) 2016, 烟台大学计算机与控制工程学院   * All rights reserved.   * 文件名称:Cube007.cpp   * 作    者:杨俊杰  * 完成日期:2016年12月8日   *   * 问题描述:用直

Gjyjj的博客 824

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

第十五周项目1(2)--验证直接插入排序算法

/*   * Copyright (c)2016,烟台大学计算机与控制工程学院   * All rights reserved.   * 文件名称:项目1.cpp   * 作    者:renjiafeng * 版 本 号:v1.0    *问题描述:验证直接插入排序,完成测试。    *输入描述:无   *程序输出:测试数据   */    直接插入排序:

hhhaaahh的博客 925

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

第十五周项目1-(2)验证直接插入排序算法

问题及代码: /* * Copyright (c)2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名称:项目1-(2).cpp * 作 者:李晓钰 * 完成日期:2016年12月8日 * 版 本 号:v1.0 *问题描述:验证直接插入排序,完成测试。 *输入描述:无 *程序输出:测试数据

lxy19971107的博客 622

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【第十五周项目1】验证算法——直接插入排序

/* * Copyright (c)2017,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名称:项目1-1.cbp * 作 者:swz * 完成日期:2017年12月14日 * 问题描述: 验证直接插入排序 * 输入描述:无 * 程序输出:测试数据 */ #inclu

swzzz的博客 329

排序算法 插入排序(直接插入排序、折半插入排序、希尔排序)

所谓折半比较,就是在插入A[i]时,取A[i-1/2]的关键码值与A[i]的关键码值进行比较,如果A[i]的关键码值小于A[i-1/2]的关键码值,则说明A[i]只能插入A[0]到A[i-1/2]之间,故可以在A[0]到A[i-1/2-1]之间继续使用折半比较;(1)计算 0 ~ i-1 的中间点,用 i 索引处的元素与中间值进行比较,如果 i 索引处的元素大,说明要插入的这个元素应该在中间值和刚加入i索引之间,反之,就是在刚开始的位置 到中间值的位置,这样很简单的完成了折半;(2)设置开始查找的位置j;

qq_36511401的博客 1万+

第十五周项目1-验证算法(2-直接插入排序)

问题及代码: /* copyright (t) 2016,烟台大学计算机学院 *All rights reserved. *文件名称:1.cpp *作者:常锐 *完成日期:2016年12月8日 *版本号:v1.0 *问题描述:请用直接插入排序算法,完成序列{57, 40, 38, 11, 13, 34, 48, 75, 6, 19, 9, 7}的排序 *输入描述:无 *程序输出

cr496352127的博客 441

第十五周 验证直接插入排序

/*问题及代码 *Copyright(c)2016,烟台大学计算机学院 *All right reserved. *文件名称:直接插入排序.cpp *作者:李潇 *时间:12月17日 *版本号;v1.0 *问题描述:  请用直接插入排序的算法完成序列任意数列的排序。 *程序输入:随意输入一个数组 *程序输出:根据题目要求输出。 */ 代码: #include

sdlixiao6的博客 345

第十五周项目四 验证算法——希尔排序

问题及代码: /* *烟台大学计算机与控制工程学院 *作 者:孙丽玮 *完成日期:2016年12月9日 *问题描述:用序列{57,40,38,11,13,34,48,75,6,19,9,7}作为测试数据,运行并本周视频中所讲过的算法对应程序,观察运行结果并深刻领会算法的思路和实现方法。 (1)直接插入排序;(2)希尔排

AFencounter的博客 530

【第十五周项目1】验证算法——冒泡排序

/* * Copyright (c)2017,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名称:项目1-2.cbp * 作 者:swz * 完成日期:2017年12月14日 * 问题描述:验证冒泡排序 * 输入描述:无 * 程序输出:测试数据 */ #include

swzzz的博客 325

第16周项目1-验证算法(1)直接插入排序

/* * Copyright (c)2015,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名称:项目1-1.cbp * 作 者:毕梦楠 * 完成日期:2015年12月18日 * 版 本 号:v1.0 * 问题描述: 验证直接插入排序 * 输入描述:无 * 程序输出:测试数据 */ 1.直接插入排序

bimengnan1030的博客 465

第15周项目1 -2验证算法之直接插入排序

问题及代码:/* *Copyright (c) 2016,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:1.cpp *作 者:申鹏鹏 *完成日期:2016年12月15日 *版 本 号:v1.0 * *问题描述:请用直接插入

qq1092394176的博客 767
上一篇: 第十五周项目三 B-树的基本操作
下一篇: 第十五周项目四 验证算法——希尔排序
MF-Bee
博客等级 码龄10年 25粉丝 93原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值