数据结构课程设计(各种排序算法的实现).doc 立即下载
2024-12-12
约5.9千字
约8页
0
128KB
举报 版权申诉
预览加载中,请您耐心等待几秒...

数据结构课程设计(各种排序算法的实现).doc

数据结构课程设计(各种排序算法的实现).doc

预览

免费试读已结束,剩余 3 页请下载文档后查看

10 金币

下载文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开










数据结构

HYPERLINK"http://www.scu.edu.cn/"课程设计报告




题目:
专业:
班级:
学号:
姓名:
指导老师:
时间:
一、课程设计题目及所涉及知识点
设计题目:排序算法实现
知识点:malloc申请连续存储空间、冒泡排序、快速排序、直接插入排序的算法实现、			结构体的定义与调用、函数的递归调用
二、课程设计思路及算法描述
设计思路:1、确定程序要实现的功能即(1)允许用户输入一组数据,任意多个。
(2)由用户选择对该组数据进行排序的方法:直接插入排序、冒泡排序、快速排序。并可以查看每趟排序的结果。
2、确定程序所需要的功能块,存储结构-结构体,malloc申请存储空间,各功能函数--冒泡排序功能块maopao();、直接插入排序功能块insertsort();、快速排序q_sort();、数据访问功能块traveres();、数据输出功能块liststring();主函数部分main();。
3、编写代码具体实现各项功能,并进行调试。
算法描述:冒泡排序(BubbleSorting)的基本思想:
设待排序n个元素存放在数组a[n]中,无序区范围初始为(a(0),a(1),a(2),...,a[n-1]),冒泡排序方法是在当前无序区内,从最上面的元素a[0]开始,对每两个相邻的元素a[i+1]和a[i](i=0,1,...,n-1)进行比较,且使值较小的元素换至值较大的元素之上(若a[i]>a[i+1],则a[i]和a[i+1]的值互换),这样经过一趟冒泡排序后,假设最后下移的元素为a[k],则无序区中值较大的几个元素到达下端并从小到大依次存放在a[k+1],a[k+2],...a[n-1]中,这样无序区范围变为(a[0],a[1],a[2],...,a[k])。在当前无序区内进行下一趟冒泡排序。这个过程一直到某一趟排序中不出现元素交换的动作,排序结束。整个排序过程最多执行n-1遍。
算法实现:
voidBubbleSort(SeqListR)
//R(l..n)是待排序的文件,采用自下向上扫描,对R做冒泡排序
{
			inti,j;
			Booleanexchange;//交换标志
			for(i=1;i<n;i++){//最多做n-1趟排序
			exchange=FALSE;//本趟排序开始前,交换标志应为假
			for(j=n-1;j>=i;j--)//对当前无序区R[i..n]自下向上扫描
			if(R[j+1].key<R[j].key){//交换记录
				R[0]=R[j+1];//R[0]不是哨兵,仅做暂存单元
				R[j+1]=R[j];
				R[j]=R[0];
				exchange=TRUE;//发生了交换,故将交换标志置为真
			}
				if(!exchange)//本趟排序未发生交换,提前终止算法
		return;
			}//endfor(外循环)
		}//BubbleSort
直接插入排序(StraightInsertionSorting)的基本思想:
把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复n-1次可完成排序过程。把a[i]插入到a[0],a[1],...,a[i-1]之中的具体实施过程为:先把a[i]赋值给变量t,然后将t依次与a[i-1],a[i-2],...进行比较,将比t大的元素右移一个位置,直到发现某个j(0<=j<=i-1),使得a[j]<=t或j为(-1),把t赋值给a[j+1].
算法实现:
voidinsert_sort(ElemTypea[],intn)		//待排序元素用一个数组a表示,数组有n个元素	{	inti,j;		ElemTypet;		for(i=1;i<n;i++)//i表示插入次数,共进行n-1次插入		{	t=a[i];//把待排序元素赋给t			j=i-1;			while((j>=0)&&(t<a[j])){
		a[j+1]=a[j];j--;}//顺序比较和移动			a[j+1]=t;}	}快速排序算法:
在R[low..high]中任选一个记录作为基准(Pivot),以此基准将当前无序区划分为左、右两个较小的子区间R[low..pivotpos-1)和R[pivotpos+1..high],并使左边子区间中所有记录的关键字均小于等于基准记录(不妨记为pivot)的关键字pivot.key,右边的子区间中所有记录的关键字均大于等于pivot.key,而基准记录pivot则位于正确的位置(p
查看更多
王子****青蛙
实名认证
内容提供者
单篇购买
VIP会员(1亿+VIP文档免费下)

扫码即表示接受《下载须知》

数据结构课程设计(各种排序算法的实现)

文档大小:128KB

限时特价:扫码查看

• 请登录后再进行扫码购买
• 使用微信/支付宝扫码注册及付费下载,详阅 用户协议 隐私政策
• 如已在其他页面进行付款,请刷新当前页面重试
• 付费购买成功后,此文档可永久免费下载
全场最划算
12个月
199.0
¥360.0
限时特惠
3个月
69.9
¥90.0
新人专享
1个月
19.9
¥30.0
24个月
398.0
¥720.0
6个月会员
139.9
¥180.0

6亿VIP文档任选,共次下载特权。

已优惠

微信/支付宝扫码完成支付,可开具发票

VIP尽享专属权益

VIP文档免费下载

赠送VIP文档免费下载次数

阅读免打扰

去除文档详情页间广告

专属身份标识

尊贵的VIP专属身份标识

高级客服

一对一高级客服服务

多端互通

电脑端/手机端权益通用