快速排序与二分查找-实验四
电 子 科 技 大 学
实 验 报 告
课程名称:
学生姓名:
学 号:
点名序号:
指导教师:
实验地点:
实验时间:
2014-2015-2学期
信息与软件工程学院
实 验 报 告(四)
学生姓名:陈*浩 学 号:************* 导教师:钱**
实验地点:基础实验大楼A508 实验时间:2015.6.3
一、 实验室名称:软件实验室
二、 实验项目名称:数据结构与算法—快速排序与二分查找
三、 实验学时:4
四、实验原理: 快速排序的基本思想是:通过一躺排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一不部分的所有数据都要小,然后再按次方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
假设要排序的数组是A[1]……A[N],首先任意选取一个数据(通常选用第一个数据)作为关键数据,然后将所有比它的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一躺快速排序。一躺快速排序的算法是:
1)设置两个变量I、J,排序开始的时候I:=1,J:=N
2)以第一个数组元素作为关键数据,赋值给X,即X:=A[1];
3)从J开始向前搜索,即(J:=J-1),找到第一个小于X的值,两者交换;
4)从I开始向后搜索,即(I:=I+1),找到第一个大于X的值,两者交换;
5)重复第3、4步,直到I=J。
二分法查找(折半查找)的基本思想:
(1)确定该区间的中点位置:mid=(low+high)/2
min代表区间中间的结点的位置,low代表区间最左结点位置,high代表区间最右结点位置
(2)将待查a值与结点mid的关键字(下面用R[mid].key)比较,若相等,则查找成功,否则确定新的查找区间:
A)如果R[mid].key>a,则由表的有序性可知,R[mid].key右侧的值都大于a,所以等于a的关键字如果存在,必然在R[mid].key左边的表中,这时high=mid-1;
B)如果R[mid].key<a,则等于a的关键字如果存在,必然在R[mid].key右边的表中。这时low=mid;
C)如果R[mid].key=a,则查找成功。
(3)下一次查找针对新的查找区间,重复步骤(1)和(2)
(4)在查找过程中,low逐步增加,high逐步减少,如果high<low,则查找失败。
五、实验目的:
本实验通过实现快速排序和折半查找算法,使学生理解如何实现快速查
找和排序的基本算法思想。通过练习,加强对算法的理解,提高编程能力。
六、实验内容:
(1)实现数据序列的输入;
(2)实现快速排序算法,并对输入的序列排序后输出;
(3)实现折半查找算法,并在步骤(2)排序后的序列上,进行任意地 查找,并输出查询结果。
七、实验器材(设备、元器件):
八、数据结构及程序
/**********************************************************
** *快速查找与二分排序 *
** *陈家浩 *
** *2015.6.6 *
*********************************************************/
#include<stdio.h>
#define MAX 100
int Data[MAX+1] = {0};
int Quick_Part(int Data[],int i,int j); //一趟排序
int Quick_Sort(int Data[],int s,int t); //递归排序
int Quick_Find(int Data[],int data,int n); //二分查找
int main(void)
{
int choose = -1; //选择功能
int i,k,data;
int n; //数据序列长度
while(1)
{
printf("+-----排序与查找-----+\n"
"| 1:输入数据序列 |\n"
"| 2:序列排序 |\n"
"| 3:查找信息 |\n"
"| 0:退出 |\n"
"+-----++++++++++-----+\n"
" 请选择:");
PC机一台,装有C/C++语言集成开发环境。
scanf("%d",&choose);
switch(choose)
{
case 1:
printf("请输入序列数据个数:");
scanf("%d",&n);
if(n>MAX){
printf("数据过多!\n\n");
break;
}
else{
printf("请输入数据序列:\n");
for(i = 1;i <= n;i++)
scanf("%d",&Data[i]);
printf("读取成功!\n\n");
}
break;
case 2:
Quick_Sort(Data,1,n); //快速排序
printf("排序成功!序列如下:\n");
for(i = 1;i <= n;i++)
printf("%d ",Data[i]);
printf("\n\n");
break;
case 3:
printf("请输入待查找的数据:");
scanf("%d",&data);
k = Quick_Find(Data,data,n); //二分法查找
if(k)
printf("查找成功!数据\"%d\"位于序列第 %d 位。\n\n",data,k); else
printf("查找失败!没有你要查找的数据!\n\n");
break;
default:
return 0;
}
}
}
int Quick_Part(int Data[],int i,int j)
{ //快速排序
Data[0] = Data[i];
while(i < j){
while((i < j) && (Data[0] <= Data[j]))
j --; //右边目标元比划分元大,j往左移
if(i < j){
Data[i] = Data[j]; //比划分元小的关键字交换到左边
i ++;
}
while((i < j) && (Data[0] >= Data[i]))
i ++; //左边目标元比划分元小,i往右移
if(i < j){
Data[j] = Data[i]; //比划分元大的关键字交换到右边
j --;
}
}
Data[i] = Data[0]; //划分元存入正确位置
return i; //返回划分元的位置
}
int Quick_Sort(int Data[],int s,int t)
{
int i = Quick_Part(Data,s,t); //调用划分过程将顺序表分成两部分
if(i>s)
Quick_Sort(Data,s,i-1); //递归调用排序
if(i<t)
Quick_Sort(Data,i+1,t); //递归调用排序
return 0;
}
int Quick_Find(int Data[],int data,int n)
{ //二分查找
int low = 1;
int high = n;
int mid;
while(low <= high){
mid = (low + high)/2; //中间位置
if(data == Data[mid])
return mid; //查找成功返回位置
else if(data > Data[mid])
low = mid +1;
else
} } high = mid -1; return 0; …… 此处隐藏:1751字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [教育文库]夜场KTV服务员的岗位职责及工作流程[1]
- [教育文库]企划、网络、市场绩效考核方案
- [教育文库]学党史、知党情、强党性--“党的基本理
- [教育文库]2016年高考物理大一轮总复习(江苏专版
- [教育文库]干部廉洁自律自查自纠的报告
- [教育文库]2010年北京大学心理学系拟录取硕士研究
- [教育文库]资金时间价值练习题及答案
- [教育文库]保护环境的心得体会
- [教育文库]英语角内容:英语趣味小知识
- [教育文库]档案收集与管理工作通知
- [教育文库]劳动规章制度范本范本
- [教育文库]高考物理一轮复习课后限时作业1运动的
- [教育文库]机械工艺夹具毕业设计195推动架设计说
- [教育文库]通用技术教学比赛说课稿2
- [教育文库]2018年四年级英语下册 Module 7 Unit 2
- [教育文库]第2章 宽带IP网络的体系结构
- [教育文库]九年级化学第五单元课题3《根据化学方
- [教育文库]小学英语六年级情态动词用法归纳
- [教育文库]甲级单位编制窑井盖项目可行性报告(立
- [教育文库]2016-2021年中国城市规划行业全景调研
- 高考英语听力十大场景词汇总结
- 全省领导班子思想政治建设座谈会会议精
- 人教版新课标高一英语提优竞赛试题 下
- 江西省2014年生物中考试题
- 长沙镇食品药品安全事故应急预案
- 《金刚石、石墨和C60》片段教学设计
- 福州教育学院(王旭东)
- 基于EDA音乐播放器的设计
- 9、古诗两首《夜书所见》《九月九日忆
- 小学语文课外阅读有效策略探讨
- 贵州文化产业发展成支柱产业的问卷调查
- 膀胱类癌的诊治体会(附3例报告)
- 发动机积碳产生的原因
- Configuring Code Composer Studio for
- 学生良好的心理素质如何培养点滴谈
- 46 电沉积法制备锂离子电池用硅-锂薄膜
- 美舍雅阁公司管理中各部门职责
- 去壳剥皮的小妙招
- 六自由度运动平台的仿真研究
- Pride and Prejudice(傲慢与偏见)




