排序算法比较实验报告

合集下载

排序的实验报告范文

排序的实验报告范文

排序的实验报告范文数据结构实验报告

实验名称:实验四排序

学生姓名:

班级:

班内序号:

学号:

日期:2022年12月21日

实验要求

题目2

使用链表实现下面各种排序算法,并进行比较。排序算法:

1、插入排序

2、冒泡排序

3、快速排序

4、简单选择排序

5、其他

要求:

1、测试数据分成三类:正序、逆序、随机数据。

2、对于这三类数据,比较上述排序算法中关键字的比较次数和移动次数(其中关键字交换计为3次移动)。

3、对于这三类数据,比较上述排序算法中不同算法的执行时间,精确到微秒(选作)。

4、对2和3的结果进行分析,验证上述各种算法的时间复杂度。

编写测试main()函数测试线性表的正确性。

2、程序分析

2.1存储结构

说明:本程序排序序列的存储由链表来完成。

其存储结构如下图所示。

(1)单链表存储结构:

结点地址:1000HA[2]

结点地址:1000H

1080H

……

头指针地址:1020HA[0]

头指针

地址:1020H

10C0H

……

地址:1080HA[3]

地址:1080H

NULL

……

地址:10C0HA[1]

地址:10C0H

1000H

……

(2)结点结构

tructNode

{

intdata;

Node某ne某t;

};

示意图:

intdataNode某ne某t

intdata

Node某ne某t

2.2关键算法分析

一:关键算法

(一)直接插入排序voidLinkSort::InertSort()

直接插入排序是插入排序中最简单的排序方法,其基本思想是:依次将待排序序列中的每一个记录插入到一个已排好的序列中,直到全部记录都排好序。

(1)算法自然语言

排序算法实验报告材料

排序算法实验报告材料

实验课程:算法分析与设计

实验名称:几种排序算法的平均性能比较(验证型实验)

实验目标:

(1)几种排序算法在平均情况下哪一个更快。

(2)加深对时间复杂度概念的理解。

实验任务:

(1)实现几种排序算法(selectionsort, insertionsort,bottomupsort,quicksort, 堆排序)。对于快速分类,SPLIT中的划分元素采用三者A(low),A(high),A((low+high)/2)中其值居中者。

(2)随机产生20组数据(比如n=5000i,1≤i≤20)。数据均属于范围(0,105)内的整数。对于同一组数据,运行以上几种排序算法,并记录各自的运行时间(以毫秒为单位)。(3)根据实验数据及其结果来比较这几种分类算法的平均时间和比较次数,并得出结论。实验设备及环境:

PC;C/C++等编程语言。

实验主要步骤:

(1)明确实验目标和具体任务;

(2)理解实验所涉及的几个分类算法;

(3)编写程序实现上述分类算法;

(4)设计实验数据并运行程序、记录运行的结果;

(5)根据实验数据及其结果得出结论;

(6)实验后的心得体会。

一:问题分析(包括问题描述、建模、算法的基本思想及程序实现的技巧等):1:随机生成n个0到100000的随机数用来排序的算法如下.

for(int n=1000;n<20000;n+=1000)

{

int a[]=new int[n];

for(int i=0;i

a[i]=(int) (Math.random()*100000);

}

2.计算时间的类Date通过它的对象d1的getTime()得到当前时间,再得到排序完成时的时间,相减得到排序所花的时间.

内部排序比较 (实验报告+源程序)C++

内部排序比较  (实验报告+源程序)C++

实验报告3

实验名称:数据结构与软件设计实习

题目:内部排序算法比较

专业:生物信息学班级:01 姓名:学号:实验日期:2010.07.24

一、实验目的:

比较冒泡排序、直接插入排序、简单选择排序、快速排序、希尔排序;

二、实验要求:

待排序长度不小于100,数据可有随机函数产生,用五组不同输入数据做比较,比较的指标为关键字参加比较的次数和关键字移动的次数;

对结果做简单的分析,包括各组数据得出结果的解释;

设计程序用顺序存储。

三、实验内容

对各种内部排序算法的时间复杂度有一个比较直观的感受,包括关键字比较次数和关键字移动次数。

将排序算法进行合编在一起,可考虑用顺序执行各种排序算法来执行,最后输出所有结果。

四、实验编程结果或过程:

1. 数据定义

typedef struct { KeyType key; }RedType; typedef struct { RedType r[MAXSIZE+1]; int length;

}SqList;

2. 函数如下,代码详见文件“排序比较.cpp”int Create_Sq(SqList &L)

void Bubble_sort(SqList &L)//冒泡排序void InsertSort(SqList &L)//插入排序

void SelectSort(SqList &L) //简单选择排序int Partition(SqList &L,int low,int high) void QSort(SqList &L,int low,int high)//递归形式的快速排序算法

数据结构课程设计实践报告

数据结构课程设计实践报告

数据结构实验报告

本文是范文,仅供参考写作,禁止抄袭本文内容上传提交,违者取消写作资格,成绩不合格!

实验名称:排序算法比较

提交文档学生姓名:

提交文档学生学号:

同组成员名单:

指导教师姓名:

排序算法比较

一、实验目的和要求

1、设计目的

1.掌握各种排序的基本思想。

2.掌握各种排序方法的算法实现。

3.掌握各种排序方法的优劣分析及花费的时间的计算。

4.掌握各种排序方法所适应的不同场合。

2、设计内容和要求

利用随机函数产生30000个随机整数,利用插入排序、起泡排序、选择排序、快速排序、堆排序、归并排序等排序方法进行排序,并统计每一种排序上机所花费的时间

二、运行环境(软、硬件环境)

软件环境:Vc6.0编程软件

运行平台: Win32

硬件:普通个人pc机

三、算法设计的思想

1、冒泡排序:bubbleSort()

基本思想: 设待排序的文件为r[1..n]

第1趟(遍):从r[1]开始,依次比较两个相邻记录的关键字

r[i].key和r[i+1].key,若r[i].key>r[i+1].key,则交换记录

r[i]和r[i+1]的位置;否则,不交换。

(i=1,2,...n-1)

第1趟之后,n个关键字中最大的记录移到了r[n]的位置上。

第2趟:从r[1]开始,依次比较两个相邻记录的关键字

r[i].key和r[i+1].key,若r[i].key>r[i+1].key,则交换记录

r[i]和r[i+1]的位置;否则,不交换。

(i=1,2,...n-2)

第2趟之后,前n-1个关键字中最大的记录移到了r[n-1]的位

置上,作完n-1趟,或者不需再交换记录时为止。

几种排序算法的平均性能比较(实验报告)

几种排序算法的平均性能比较(实验报告)

实验课程:算法分析与设计

实验名称:几种排序算法的平均性能比较(验证型实验)

实验目标:

(1)几种排序算法在平均情况下哪一个更快。

(2)加深对时间复杂度概念的理解。

实验任务:

(1)实现几种排序算法(selectionsort, insertionsort,bottomupsort,quicksort, 堆排序)。对于快速分类,SPLIT中的划分元素采用三者A(low),A(high),A((low+high)/2)中其值居中者。

(2)随机产生20组数据(比如n=5000i,1≤i≤20)。数据均属于范围(0,105)内的整

数。对于同一组数据,运行以上几种排序算法,并记录各自的运行时间(以毫秒为单位)。(3)根据实验数据及其结果来比较这几种分类算法的平均时间和比较次数,并得出结论。实验设备及环境:

PC;C/C++等编程语言。

实验主要步骤:

(1)明确实验目标和具体任务;

(2)理解实验所涉及的几个分类算法;

(3)编写程序实现上述分类算法;

(4)设计实验数据并运行程序、记录运行的结果;

(5)根据实验数据及其结果得出结论;

(6)实验后的心得体会。

问题分析(包括问题描述、建模、算法的基本思想及程序实现的技巧等):

选择排序:令A[1…n]为待排序数组,利用归纳法,假设我们知道如何对后n-1个元素排序,

即对啊[A…n]排序。对某个j,1<=j<=n,设A[j]是最小值。首先,如果就!=1,我们交换A[1]

和A[j]。然后由假设,已知如何对A[2..n]排序,因此可对在A[2…n]中的元素递归地排序。

两个样品的排序实验

两个样品的排序实验

两个样品的排序实验

以两个样品的排序实验为标题,写一篇文章。

引言:

排序实验是一种常见的实验方法,通过对样品进行排序,可以研究其特性和性能。本文将介绍两个样品的排序实验,包括实验目的、实验步骤、实验结果和实验分析等内容。

一、实验目的

本实验的主要目的是比较两个样品的排序性能,了解它们在不同条件下的排序效果,并分析其影响因素。

二、实验步骤

1. 准备工作:选取两个样品A和B进行实验,确保它们具有一定的共同特性,例如大小、形状、重量等。

2. 实验设备:准备一个排序平台,可以手动或自动进行排序操作。

3. 实验条件:设定不同的排序条件,例如排序速度、排序精度、样品摆放方式等。

4. 实验操作:

a. 将样品A和B放置在排序平台上,并按照实验条件进行排列。

b. 启动排序平台,观察样品的排序效果。

c. 记录每个排序条件下的排序结果,包括排序时间、排序准确度等指标。

5. 数据分析:根据实验结果,对比两个样品在不同条件下的排序效果,分析其差异和影响因素。

三、实验结果

根据实验操作和数据记录,得到了以下实验结果:

1. 在相同排序速度和排序精度条件下,样品A的排序时间明显短于样品B。

2. 在相同排序速度和排序时间条件下,样品A的排序准确度高于样品B。

3. 在不同的样品摆放方式下,样品A和B的排序效果有所差异,但总体趋势保持一致。

四、实验分析

根据实验结果可以得出以下分析结论:

1. 样品的性质和特性对排序效果有较大影响。样品A可能具有较好的排序性能,因其重量轻、形状规则等特点,有利于排序操作。

2. 排序条件的设定也会影响排序效果。例如,较快的排序速度可能会降低排序的准确度,而较慢的排序速度则可以提高准确度。

排序的应用实验报告

排序的应用实验报告

排序的应用实验报告

实验题目:排序的应用实验

一、实验目的:

1. 了解排序算法的基本原理和应用场景;

2. 掌握常见的排序算法的实现方法;

3. 熟悉排序算法的时间复杂度分析;

4. 在实际应用中灵活运用排序算法。

二、实验原理:

排序是将一组数据按照某个规则进行重新排列的过程,常见的排序算法有冒泡排序、选择排序、插入排序、归并排序、快速排序、堆排序等。每种排序算法有其特点和适用场景,掌握不同排序算法的实现方法和时间复杂度对于实际应用非常重要。

三、实验内容及步骤:

1. 冒泡排序实验:

a) 随机生成一组整数数据;

b) 利用冒泡排序算法对数据进行排序;

c) 输出排序结果,并统计排序过程中的比较次数和交换次数。

2. 选择排序实验:

a) 随机生成一组整数数据;

b) 利用选择排序算法对数据进行排序;

c) 输出排序结果,并统计排序过程中的比较次数和交换次数。

3. 插入排序实验:

a) 随机生成一组整数数据;

b) 利用插入排序算法对数据进行排序;

c) 输出排序结果,并统计排序过程中的比较次数和移动次数。

4. 归并排序实验:

a) 随机生成一组整数数据;

b) 利用归并排序算法对数据进行排序;

c) 输出排序结果。

5. 快速排序实验:

a) 随机生成一组整数数据;

b) 利用快速排序算法对数据进行排序;

c) 输出排序结果。

四、实验结果及分析:

1. 冒泡排序实验结果:

随机生成的一组整数数据为:[5, 3, 8, 2, 6]

排序过程中的比较次数为:10

排序过程中的交换次数为:4

排序结果为:[2, 3, 5, 6, 8]

2. 选择排序实验结果:

排序算法实验报告

排序算法实验报告

数据结构实验报告

八种排序算法实验报告

一、实验内容

编写关于八种排序算法的C语言程序,要求包含直接插入排序、希尔排序、简单选择排序、堆排序、冒泡排序、快速排序、归并排序和基数排序。

二、实验步骤

各种内部排序算法的比较:

1.八种排序算法的复杂度分析(时间与空间)。

2.八种排序算法的C语言编程实现。

3.八种排序算法的比较,包括比较次数、移动次数。

三、稳定性,时间复杂度和空间复杂度分析

比较时间复杂度函数的情况:

时间复杂度函数O(n)的增长情况

所以对n较大的排序记录。一般的选择都是时间复杂度为O(nlog2n)的排序方法。

时间复杂度来说:

(1)平方阶(O(n2))排序

各类简单排序:直接插入、直接选择和冒泡排序;

(2)线性对数阶(O(nlog2n))排序

快速排序、堆排序和归并排序;

(3)O(n1+§))排序,§是介于0和1之间的常数。

希尔排序

(4)线性阶(O(n))排序

基数排序,此外还有桶、箱排序。

说明:

当原表有序或基本有序时,直接插入排序和冒泡排序将大大减少比较次数和移动记录的次数,时间复杂度可降至O(n);

而快速排序则相反,当原表基本有序时,将蜕化为冒泡排序,时间复杂度提高为O(n2);

原表是否有序,对简单选择排序、堆排序、归并排序和基数排序的时间复杂度影响不大。

稳定性:

排序算法的稳定性:若待排序的序列中,存在多个具有相同关键字的记录,经过排序,这些记录的相对次序保持不变,则称该算法是稳定的;若经排序后,记录的相对次序发生了改变,则称该算法是不稳定的。

稳定性的好处:排序算法如果是稳定的,那么从一个键上排序,然后再从另一个键上排序,第一个键排序的结果可以为第二个键排序所用。基数排序就是这样,先按低位排序,逐次按高位排序,低位相同的元素其顺序再高位也相同时是不会改变的。另外,如果排序算法稳定,可以避免多余的比较;

常用排序算法比较与分析报告

常用排序算法比较与分析报告

常用排序算法比较与分析

一、常用排序算法简述

下面主要从排序算法的基本概念、原理出发,分别从算法的时间复杂度、空间复杂度、算法的稳定性和速度等方面进行分析比较。依据待排序的问题大小(记录数量 n)的不同,排序过程中需要的存储器空间也不同,由此将排序算法分为两大类:【排序】、【外排序】。

排序:指排序时数据元素全部存放在计算机的随机存储器RAM中。

外排序:待排序记录的数量很大,以致存一次不能容纳全部记录,在排序过程中还需要对外存进行访问的排序过程。

先了解一下常见排序算法的分类关系(见图1-1)

图1-1 常见排序算法

二、排序相关算法

2.1 插入排序

核心思想:将一个待排序的数据元素插入到前面已经排好序的数列中的适当位置,使数据元素依然有序,直到待排序数据元素全部插入完为止。

2.1.1 直接插入排序

核心思想:将欲插入的第i个数据元素的关键码与前面已经排序好的i-1、i-2 、i-3、… 数据元素的值进行顺序比较,通过这种线性搜索的方法找到第i个数据元素的插入位置,并且原来位置的数据元素顺序后移,直到全部排好顺序。

直接插入排序中,关键词相同的数据元素将保持原有位置不变,所以该算法是稳定的,时间复杂度的最坏值为平方阶O(n2),空间复杂度为常数阶O(l)。

Python源代码:

1.#-------------------------直接插入排序--------------------------------

2.def insert_sort(data_list):

3.#遍历数组中的所有元素,其中0号索引元素默认已排序,因此从1开始

排序算法比较实验报告

排序算法比较实验报告

信息学部算法分析

上机报告

学号0901********

姓名陈龙_________ 扌旨导老师秦明_________ 时间2011.11.1~11.23

上机实验题目

实验1 比较归并排序和快速排序的区别。

实验2 利用贪心算法对背包问题进行求解

算法设计思路

归并排序:

申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列,设定两个指针,最初位置分别为两个已经排序序列的起始位置,比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置,重复步骤直到某一指针达到序列尾,将另一序列剩下的所有元素直接复制到合并序列尾。

快速排序:

设置两个变量I、J,排序开始的时候:1=0, J=N-1;以第一个数组元素作为关键数据,赋值给key,即key=A[0];从J开始向前搜索,即由后开始向前搜索(J=J-1),找到第一个小于key的值A[J],并与key交换;从I开始向后搜索,即由前开始向后搜索(I=I+1),找到第一个大于key的A[I],与key交换;重复第3、4、5 步,直到I=J;(3,4 步是在程序中没找到时候j=j-1 ,i=i+1 ,直至找到为止。找到并交换的时候i,j指针位置不变。另外当i=j这过程一定正好是i+或j-完成的最后另循环结束。)

背包问题:

用子问题定义状态:即f[i][v] 表示前i 件物品恰放入一个容量为v 的背包可以获得的最大价值。则其状态转移方程便是:f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]} 。可以压缩空间,

排序算法的比较课程设计实验报告

排序算法的比较课程设计实验报告

《数据结构》课程设计报告题目: 排序算法的比较

目录

一、课程设计名

称 (Ⅲ)

二、使用工具软

件 (Ⅲ)

三、目的意

义 (Ⅲ)

四、基本要

求 (Ⅲ)

五、实验歩骤 (Ⅲ)

六、运行结果 (Ⅺ)

七、得意之处………………………………………………………XIV

八、创意的技术实现………………………………………………XV

九、目前存在的问题………………………………………………XV

十、设计实验过程中的自我感受…………………………………XV

十一、主要参考资料………………………………………………XV

一、课程设计名称:排序算法的比较

二、使用工具软件:Microsoft Visual C++6.0

三、目的意义:

1.掌握各种排序算法(直接出入排序、冒泡排序、快速排

序、简单选择排序)的思路核心,比较他们之间的优劣

2.全面提高学生的程序设计、开发能力

四、基本要求:

1.任意性:系统首先生成1000个随机整数,然后分别用不同的排序方法对其进行升序排序,给出每种方法的

比较次数或所用时间

2.友好性:界面要友好,输入有提示,尽量展示人性化 3.可读性:源程序代码清晰、有层次

4.健壮性:用户输入非法数据时,系统要及时给出警告信息

五、实验歩骤:

#include"iostream.h"

#include"stdio.h"

#include"stdlib.h"

#include"time.h"

long count = 0;

#define MAXSIZE 100000

typedef long keyType;

typedef struct{

keyType key;

排序算法比较实验报告

排序算法比较实验报告
实现过程(如图3)。
对于数组(21 25 49 16 08)。
初态:
21
25
49
16
08
第一趟:
08
25
49
16
21
第二趟:
08
16
49
25
21
第三趟:
08
16
21
25
49
图3
3.直接插入排序:依次将待排序的序列中的每一个记录插入到先前排序好的序列中,直到全部记录排序完毕。
实现过程(如图4)。
对于数组(21 25 49 16 08)。
//static long ST=0;
long SelectMinKey(long R[],long i,long n)//在R[i..R.length]中选择关键字最小的记录
{
long temp=i;//记录最小的元素值的位置
for(int j=i;j<=n;j++)
{
if(R[temp]>R[j])
这次课设做还有许多没有考虑周到的地方,希望老师指出。
6参考文献
[1] 严蔚敏 吴伟民,数据结构(C语言版),北京:清华大学出版社,2007。
[2] 汪祖柱 沈晓潞,基于C语言实现的若干排序算法和分析,安徽电气工程职业学院学报,第九卷第一期。
[3] 王莉,常用内部排序算法的比较与选择,软件导刊,2006年1月号。

排序算法的比较课程设计实验报告

排序算法的比较课程设计实验报告

《数据结构》课程设计报告题目: 排序算法的比较

目录

一、课程设计名

称 (Ⅲ)

二、使用工具软

件 (Ⅲ)

三、目的意

义 (Ⅲ)

四、基本要

求 (Ⅲ)

五、实验歩骤 (Ⅲ)

六、运行结果 (Ⅺ)

七、得意之处………………………………………………………XIV

八、创意的技术实现………………………………………………XV

九、目前存在的问题………………………………………………XV

十、设计实验过程中的自我感受…………………………………XV

十一、主要参考资料………………………………………………XV

一、课程设计名称:排序算法的比较

二、使用工具软件:Microsoft Visual C++6.0

三、目的意义:

1.掌握各种排序算法(直接出入排序、冒泡排序、快速排

序、简单选择排序)的思路核心,比较他们之间的优劣

2.全面提高学生的程序设计、开发能力

四、基本要求:

1.任意性:系统首先生成1000个随机整数,然后分别用不同的排序方法对其进行升序排序,给出每种方法的

比较次数或所用时间

2.友好性:界面要友好,输入有提示,尽量展示人性化 3.可读性:源程序代码清晰、有层次

4.健壮性:用户输入非法数据时,系统要及时给出警告信息

五、实验歩骤:

#include"iostream.h"

#include"stdio.h"

#include"stdlib.h"

#include"time.h"

long count = 0;

#define MAXSIZE 100000

typedef long keyType;

typedef struct{

keyType key;

排序算法实验报告

排序算法实验报告

数据结构实验报告

八种排序算法实验报告

一、实验内容

编写关于八种排序算法的C语言程序,要求包含直接插入排序、希尔排序、简单选择排序、堆排序、冒泡排序、快速排序、归并排序和基数排序。

二、实验步骤

各种内部排序算法的比较:

1.八种排序算法的复杂度分析(时间与空间)。

2.八种排序算法的C语言编程实现。

3.八种排序算法的比较,包括比较次数、移动次数。

三、稳定性,时间复杂度和空间复杂度分析

比较时间复杂度函数的情况:

时间复杂度函数O(n)的增长情况

所以对n较大的排序记录。一般的选择都是时间复杂度为O(nlog2n)的排序方法。

时间复杂度来说:

(1)平方阶(O(n2))排序

各类简单排序:直接插入、直接选择和冒泡排序;

(2)线性对数阶(O(nlog2n))排序

快速排序、堆排序和归并排序;

(3)O(n1+§))排序,§是介于0和1之间的常数。

希尔排序

(4)线性阶(O(n))排序

基数排序,此外还有桶、箱排序。

说明:

当原表有序或基本有序时,直接插入排序和冒泡排序将大大减少比较次数和移动记录的次数,时间复杂度可降至O(n);

而快速排序则相反,当原表基本有序时,将蜕化为冒泡排序,时间复杂度提高为O(n2);

原表是否有序,对简单选择排序、堆排序、归并排序和基数排序的时间复杂度影响不大。

稳定性:

排序算法的稳定性:若待排序的序列中,存在多个具有相同关键字的记录,经过排序,这些记录的相对次序保持不变,则称该算法是稳定的;若经排序后,记录的相对次序发生了改变,则称该算法是不稳定的。

稳定性的好处:排序算法如果是稳定的,那么从一个键上排序,然后再从另一个键上排序,第一个键排序的结果可以为第二个键排序所用。基数排序就是这样,先按低位排序,逐次按高位排序,低位相同的元素其顺序再高位也相同时是不会改变的。另外,如果排序算法稳定,可以避免多余的比较;

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

信息学部算法分析

上机报告

学号0901******** 姓名陈龙

指导老师秦明

时间2011.11.1~11.23

一.上机实验题目

实验1

比较归并排序和快速排序的区别。

实验2

利用贪心算法对背包问题进行求解。

二.算法设计思路

归并排序:

申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列,设定两个指针,最初位置分别为两个已经排序序列的起始位置,比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置,重复步骤直到某一指针达到序列尾,将另一序列剩下的所

有元素直接复制到合并序列尾。

快速排序:

设置两个变量I、J,排序开始的时候:I=0,J=N-1;以第一个数组元素作为关键数据,赋值给key,即key=A[0];从J开始向前搜索,即由后开始向前搜索(J=J-1),找到第一个小于key的值A[J],并与key交换;从I开始向后搜索,即由前开始向后搜索(I=I+1),找到第一个大于key的A[I],与key交换;重复第3、4、5步,直到I=J;(3,4步是在程序中没找到时候j=j-1,i=i+1,直至找到为止。找到并交换的时候i,j指针位置不变。另外当i=j这过程一定正好是i+或j-完成的最后另循环结束。)

背包问题:

用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是:f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]} 。可以压缩空间,f[v]=max{f[v],f[v-c[i]]+w[i]}

三. 源程序

归并排序

#include

#include

# define N 50

int b[N],a[N];

int n,i;

void Merge (int low, int mid,int high) //合并

{

int i; int l=low,h=mid+1,k=l;

while ((l<=mid) && (h<=high)) //部分合并

{

if (a[l]<=a[h]) b[k++]=a[l++];

else b[k++]=a[h++];

}

if(l>mid)

while (h<=high) b[k++]=a[h++]; //转储剩余部分 else

while(l<=mid) b[k++]=a[l++];

for (i=0;i<=high;i++) //将b数组转储到a a[i]=b[i];

}

int Merge2 (int l,int h) //分类

{

for (i=0;i

printf("%d ",a[i]);

printf("\n");

int m;

if (l

{

m=(l+h)/2;

Merge2(l, m);

Merge2(m+1, h);

Merge ( l,m,h);

}

return a[i];

}

void main()

{

printf("请输入您要排序的数组大小(不超过50):");

while (scanf("%d",&n)!=EOF)

{

for (i=0;i

scanf("%d",&a[i]);

Merge2(0,n-1);

for (i=0;i

printf("%d ",a[i]);

printf("%d\n",a[n-1]);

}

}

快速排序

#include "stdio.h"

#include "stdlib.h"

# define N 50

int a[N];

int i,n;

void Quick(int list[ ], int left, int right) //lfet为数组最左端, right为数组最右端{

int s;

int i, j;

int temp;

for (i=0;i

printf("%d ",a[i]);

printf("\n");

if(left < right) //如果没有查询完所有数组,则继续递归{

s = list[left];

i = left-1;

j = right + 1;

while(i+1!=j)

{

if(list[i+1]<=s)

i++;

else if(list[j-1]>s)

j--;

else

{

temp=list[i+1];

list[++i]=list[j-1];

list[--j]=temp;

}

}

list[left] = list[i];

list[i] = s;

Quick(list, left, i - 1); //对左边递归

Quick(list, i + 1, right); //对右边递归}

}

void main()

{

printf("请输入您要排序的数组大小(不超过50):");

while (scanf("%d",&n)!=EOF)

{

for (i=0;i

scanf("%d",&a[i]);

Quick(a,0,n-1);

for (i=0;i

printf("%d ",a[i]);

printf("%d\n",a[n-1]);

}

}

背包问题

#include

#include

#define N 3

struct Thing

{

int num ;

int price;

int weight;

float aver;

};

void swap(int *i,int *j)

{

int temp;

temp = *i;

*i = *j;

*j = temp;

}

int main()

{

int M;

int i,j,k=0,NUM = 1;

相关文档
最新文档