数据结构课程设计报告

发布 2022-10-05 19:08:28 阅读 8280

“oesort(sqlist l,int n)”:该函数进行奇偶排序将无序的数据排成有序的。

五. 核心程序算法:

void shellsort(sqlist& l,int d

//采用希尔排序,本程序中的使暂存单元,非哨兵。

d=while(d>0)

for(i=d+1;i<=

if(<

for(j=i-d;j>0&&<

d=d/2;}

基本思想:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为dl的倍数的记录放在同一个组中。

先在各组内进行直接插人排序;然后,取第二个增量d2void quicksort(sqlist& l,int low,int high)

//快速排序。

if(low

基本思想。设当前待排序的无序区为r[low..high],利用分治法可将快速排序的基本思想描述为:

①分解:在r[low..high]中任选一个记录作为基准(pivot),以此基准将当前无序区划分为左、右两个较小的子区间r[low..

pivotpos-1]和r[pivotpos+1..high],并使左边子区间中所有记录的关键字均小于等于基准记录(不妨记为pivot)的关键字右边的子区间中所有记录的关键字均大于等于而基准记录pivot则位于正确的位置(pivotpos)上,它无须参加后续的排序。注意:

划分的关键是要求出基准记录所在的位置pivotpos。划分的结果可以简单地表示为(注pivot=r[pivotpos])r[low..pivotpos-1].

keys≤r[pivotpos].key≤r[pivotpos+1..high].

keys其中low≤pivotpos≤high。②求解:通过递归调用快速排序对左、右子区间r[low..

pivotpos-1]和r[pivotpos+1..high]快速排序。③组合:

因为当"求解"步骤中的两个递归调用结束时,其左、右两个子区间已有序。对快速排序而言,"组合"步骤无须做什么,可看作是空操作。

void heapadjust(sqlist &l,int s,int m)

// 筛选法调整堆,使其成为大顶堆

rc=for(j=2*s;j<=m;j*=2)

if(jj++;

if(rc>

s=j;}void heapsort(sqlist &l)

//建堆的过程。

for(i=>0;i--)

heapadjust(l,i,for(i=>1;i--)

t=heapadjust(l,1,i-1);

基本思想:堆排序利用了大根堆堆顶记录的关键字最大这一特征,使得在当前无序区中选取最大关键字的记录变得简单。先将初始文件r[1..

n]建成一个大根堆,此堆为初始的无序区。再将关键字最大的记录r[1](即堆顶)和无序区的最后一个记录r[n]交换,由此得到新的无序区r[1..n-1]和有序区r[n],且满足r[1..

n-1].keys≤r[n].key。

由于交换后新的根r[1]可能违反堆性质,故应将当前无序区r[1..n-1]调整为堆。然后再次将r[1..

n-1]中关键字最大的记录r[1]和该区间的最后一个记录r[n-1]交换,由此得到新的无序区r[1..n-2]和有序区r[n-1..n],且仍满足关系r[1..

n-2].keys≤r[n-1..n].

keys,同样要将r[1..n-2]调整为堆。

直到无序区只有一个元素为止。

void oesort(sqlist& l,int n)

//奇偶交换排序。

change=1;标志变量,若其为零,即两次更替的交换中都没有交换数据,即排序结束。

while(change)

change=0;

for(i=1;iif(>

t=change=1;

for(i=2;iif(>

t=change=1;

算法过程:第一趟对序列中的所有奇数项i扫描,第二趟对序列中的所有偶数项i扫描。若ri] >r[i+1],则交换它们。

第三趟有对所有的奇数项,第四趟对所有的偶数项,……

如此反复,直到整个序列全部排好序为止。

五.源程序:

#include ""

#include ""

#include ""

#define maxsize 5

typedef struct

void quicksort(sqlist l,int low,int high)

int i,j;

if(low{i=low;j=high;

dowhile(i

-j;if(i{

while(i++i;

if(iwhile(i!=j);

quicksort(l,low,i-1);

quicksort(l,i+1,high);

void heapadjust(sqlist l,int s,int m)

int rc,j;

rc=for(j=2*s;j<=m;j*=2)

if(jj++;

if(rc>

break;

s=j;void heapsort(sqlist l)

int i,t;

for(i=>0;i--)

heapadjust(l,i,for(i=>1;i--)

t=heapadjust(l,1,i-1);

void oesort(sqlist l,int n)

int t,i,change;

change=1;

while(change)

change=0;

for(i=1;iif(>

t=change=1;

for(i=2;iif(>

t=change=1;

main()

int i,j,low,high,a[maxsize+1];

char ch;

sqlist l;

clrscr();

*)malloc(maxsize*sizeof(int));

if(!printf("overflow");

printf("please input five elements:");

数据结构课程设计报告

东莞理工学院城市学院。题目 二叉排序树 专业 计算机科学与技术 本 年级 2010级计算机科学与技术专业 1 班。个人姓名 何振江。指导教师 张娟老师 时间 2010至2011第二学期第18周 地点 实验楼615机房 东莞理工学院城市学院计算机与信息科学系制。2011年 6月。实习报告的内容。一 问...

数据结构课程设计报告

设计一个校园导游程序,为来访的客人提供信息查询服务。1 设计学校的校园平面图。选取若干个有代表性的景点抽象成一个无向带权图 无向网 以图中顶点表示校内各景点,边上的权值表示两景点之间的距离。2 存放景点代号 名称 简介等信息供用户查询。3 为来访客人提供图中任意景点相关信息的查询。4 为来访客人提供...

数据结构课程设计报告

河北科技大学。课程设计报告。学生姓名学号。专业班级。课程名称数据结构。学年学期 2 012 2 013学年第 2 学期指导教师 黄春茹。2 0 13年 6 月。课程设计成绩评定表。一 数据结构课程设计目标。二 问题描述。三 需求分析。四 概要设计。五 详细设计。六 软件说明书 给出软件如何使用,使用...