《软件技术基础》实验指导 实验七

排序

实验七 排序

一、实验目的

  1. 熟悉各种内部排序算法
  2. 能够编写程序显示排序过程中各趟排序的结果
  3. 能够编写一些排序的算法

二、实验内容

  1. 采用希尔排序方法对顺序表中的证型数据进行排序,设计希尔排序算法并显示每趟排序的结果。
  2. 编写一个双向起泡的排序算法,即在排序过程中交替改变扫描方向,同时显示各趟排序的结果。

Tips

  1. 7.1 希尔排序 https://en.wikipedia.org/wiki/Shellsort
  2. 7.2 鸡尾酒排序 https://en.wikipedia.org/wiki/Cocktail_shaker_sort

Answer

7.1

//希尔排序的程序代码
#include<stdio.h>
//顺序表结构类型定义
typedef int datatype;
typedef struct{
    int key;
    datatype data;
}rectype;
const int N=10;
const int D1=5;

void create(rectype[],int);
void print(rectype[],int);
void shellsort(rectype[],int[]);

//void main()
int main()
{
    rectype r[N+D1];//D1个元素存放监视哨,N个元素存放记录
    int d[3]={5,3,1};//设置3趟的增量
    create(r,N);//建立存放记录的顺序表
    printf("排序前的数据:");
    print(r,N);//输出排序前的记录表
    shellsort(r,d);//希尔排序
    printf("排序后的数据:");
    print(r,N);//输出排序后的记录表
    return 0;
}

//建立顺序表
void create(rectype r[],int n)
{
    printf("输入10个整型数:");
    for(int i=0;i<n;i++)
        scanf("%d",&r[D1+i].key);
}

//输出顺序表
void print(rectype r[],int n)
{
    for(int i=0;i<n;i++)
        printf("%5d",r[D1+i].key);
    printf("\n");
}

//希尔排序
void shellsort(rectype r[],int d[])
{
    int i,j,k,h;
    rectype temp;
    int maxint=32767;
    for(i=0;i<D1;i++)
    {
        r[i].key=-maxint;//设置 T 个监视哨
    }
    k=0;
    do
    {
        h=d[k];//取一趟的增量
        for(i=h+D1;i<N+D1;i++)
        {
            temp=r[i];
            j=i-h;
            while(temp.key<r[j].key)
            {
                r[j+h]=r[j];
                j=j-h;
            }
            r[j+h]=temp;
        }//组内直接插入法排序
        print(r,N);
        k++;
    }
    while(h!=1);
}

7.2

//双向起泡排序的程序代码
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
//顺序表结构类型定义
typedef int datatype;
typedef struct{
    int key;
    datatype data;
}sequenlist;

void create(sequenlist[],int);
void print(sequenlist[],int);
void dbubblesort(sequenlist[],int);

//void main()
int main()
{
    const int n=10;
    sequenlist r[n+1];
    create(r,n);
    printf("排序前的数据:");
    print(r,n);
    dbubblesort(r,n);
    printf("排序后的数据:");
    print(r,n);
    return 0;
}

//建立顺序表
void create(sequenlist r[],int n)
{
    srand(time(0));
    for(int i=1;i<=n;i++)
        r[i].key=rand()%90;
}

//输出顺序表
void print(sequenlist r[],int n)
{
    for(int i=1;i<=n;i++)
        printf("%5d",r[i].key);
    printf("\n");
}

//双向起泡排序
void dbubblesort(sequenlist r[],int n)
{
    int i=1,j,noswap=1;
    sequenlist temp;
    while(noswap)
    {
        noswap=0;
        for(j=n-i+1;j>=i+1;j--)
        {
            if(r[j].key<r[j-1].key)
            {
                noswap=1;
                temp=r[j];
                r[j]=r[j-1];
                r[j-1]=temp;
            }
        }
        for(j=i+1;j<=n-i;j++)
        {
            if(r[j].key>r[j+1].key)
            {
                noswap=1;
                temp=r[j];
                r[j]=r[j+1];
                r[j=1]=temp;
            }
        }
        for(int k=1;k<=n;k++)
        {
            printf("%5d",r[k].key);
        }
        printf("\n");
        i++;
    }
}

原文地址:https://www.cnblogs.com/vanlion/p/datastructure-exp-7.html

时间: 2024-10-26 22:33:31

《软件技术基础》实验指导 实验七的相关文章

对软件技术基础的课程期望及git的初步了解

大一的c程序设计课程的学习让我对编程语言有了初步的了解,但只是在简单程序的编写上,对编程的应用毫无了解.我希望在软件技术基础这门课上,学习到如何实现从编程到一个软件的制作.另外,在平日的学习中,我少与人结伴,喜独来独往,而对团队的合作无法很好的适应,我希望通过这门课程弥补自身的不足,在软件工程的学习中学会融入团队,实现自我价值. 在此之前,我对git的了解知之甚少.通过相关资料的浏览后我了解到,git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到很大的项目版本管理.开发者可以通过在

《软件技术基础》实验指导 实验八

查找 实验八 查找 一.实验目的 熟悉线性表.二叉排序树和散列表的查找 能够编写一些查找的算法 二. 实验内容 18个记录的关键字如下,编写分块查找的算法进行查找. 22.12.13.8.9.20.33.42.44.38.24.48.60.58.74.49.86.53 编写一个判别给定的二叉树是否为二叉排序树的算法,设二叉树以二叉链表存储表示,结点的数据域只存放正整数. Tips 8.1 分块查找 http://student.zjzk.cn/course_ware/data_structure

S1/软件技术基础/06-操作系统常用技巧

常用的DOS命令 选择“开始”→“运行”命令,然后输入“cmd”,单击“确定”按钮.此时将出现一个显示命令提示符的窗口.他是windows体系中的命令解释程序.“C:\>”称为命令提示符,该提示符包含当前正在使用的磁盘名称如我们使用C盘,D盘等,在闪动的光标处可以输入各种DOS命令,按Enter键就可以执行这些命令了. 注意:在线面列出的这些DOS命令语法中,所有“[]”和“<>”中的部分都称为参数,“[]”中的参数是可选的,“<>”中的参数是必需的,不同的参数会使命令产生不

S1/软件技术基础/07-网络相关配置

IP地址的表示方法 IP地址有32位,由4个8位的二进制数组成,每8位之间用圆点隔开,如11000000.10101000.00000010.00010100. 由于二进制不便记忆且可读性较差,所以通常都把二进制转换成十进制数表示,如196.168.2.21. 因此,一个IP地址通常用3个点分开的十进制数表示,称为点分十进制. IP地址的分类 每一个IP地址都包括两部分:网络ID和主机ID.其中,网络ID标识计算机或网络设备所在的不同网络,主机ID标识一个网络中特定的主机. IP地址的网络ID由

S1/软件技术基础/02-Word文档编辑

设置自动更正选项:单击“office按钮”→“Word选项”→“校对”→“自动更正选项”按钮,打击后打开“自动更正”对话框,我们就可以根据提示信息进行设置. 使用修订功能:单击“审阅”功能选项卡→“修订”功能面板→“修订”按钮,吃屎Word文档就进入了修订状态.而后你对他的删除和修改等操作都是红色的修订字.修订完以后,取消修订状态,别人就可以根据你的修订修改文档了.

S1/软件技术基础/01-中英文输入

QWERTY键盘,DUORAK键盘,MALT键盘 用键盘选中删除一段文字. (1)将光标移到这段文字的开始点. (2)按住shift键不放,再通过按上.下.左.右方向键,直到到达文字的终点.

操作系统实验指导书(完整版)

操作系统实验指导书 烟台大学计算机学院 操作系统课程组 2008-9-20 第一部分  操作系统上机指导   Linux操作系统环境: RedHat Enterprise Linux ES release 3 (Taroon Update 1) (2.4.21-9.EL) Red Flag Linux release 4.0 (HOT) (2.4)   登录到系统 常用命令练习: 用root账号(超级用户)注册,口令为computer(注意大小写).注册成功出现#号(超级用户系统提示符,普通用户

WLGK-51单片机接口技术基础实验 ——LED闪烁灯

WLGK-51单片机接口技术基础实验-LED闪烁灯 当我们开始接触单片机,首先接触的第一个实验就是LED灯的使用,类似于我们学习软件开始接触的第一个程序"HelloWorld",这个实验是带领我们走入"软硬件综合使用"的一个很好入门示例,51单片机是他的一个载体.下面小伙伴们,让我们一起来揭开LED的神秘面纱吧! 万立高科官网:www.wanligaoke.com 万立高科官方商城:http://www.wlgkbj.com 万立高科淘宝直销店铺:https://r

20171113曾英特《逆向及Bof基础实践》实验报告

一.实验名称 逆向及Bof基础实践 二.实验目的 1.掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码 2.掌握反汇编与十六进制编程器 3.能正确修改机器指令改变程序执行流程 4.能正确构造payload进行bof攻击 三.实验内容 本次实验的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串.该程序同时包含另一个代码片段getShell,会返回一个可用Shell.正常情况下这个代码是不会被运行的