山东大学数据结构实验二Word格式.docx
- 文档编号:21817085
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:12
- 大小:317.63KB
山东大学数据结构实验二Word格式.docx
《山东大学数据结构实验二Word格式.docx》由会员分享,可在线阅读,更多相关《山东大学数据结构实验二Word格式.docx(12页珍藏版)》请在冰豆网上搜索。
#include<
iostream.h>
windows.h>
intt=0,p=0,k=0;
voidxuanze(inta[]){//选择排序
inti,j,local,temp,max,op;
for(i=0;
i<
8;
i++){
max=a[i];
local=i;
for(j=i+1;
j<
9;
j++){
if(a[j]>
max){max=a[j];
local=j;
}
}
if(i!
=local){temp=a[i];
a[i]=a[local];
a[local]=temp;
cout<
<
"
step"
i+1<
:
endl;
for(op=0;
op<
op++){
cout<
a[op]<
"
;
}
voidmaopao(inta[]){//冒泡排序
intn,j,temp,op;
for(n=0;
n<
n++){
for(j=0;
8-n;
if(a[j]<
a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
n+1<
voidcharu(inta[]){
intb[9]={0};
inti,j,op;
i++){
for(j=i;
j>
0;
j--)
{
if(b[j-1]<
=a[i])
b[j]=b[j-1];
elsebreak;
}
b[j]=a[i];
cout<
b[op]<
intmaxbit(intdata[],intn)//辅助函数,求数据的最大位数
{
intd=1;
//保存最大的位数
intp=10;
for(inti=0;
i<
n;
++i){
while(data[i]>
=p){
p*=10;
++d;
returnd;
voidjishu(intdata[],intn)//基数排序
n=9;
intop;
intd=maxbit(data,n);
//数组中的元素的最大位数
int*tmp=(int*)malloc(n*sizeof(int));
int*count=(int*)malloc(10*sizeof(int));
//计数器
inti,j,k;
intradix=1;
for(i=1;
=d;
i++){//进行d次排序
for(j=0;
j<
10;
j++)
count[j]=0;
//每次分配前清空计数器
j++){
k=(data[j]/radix)%10;
//计算每次循环某一位的数字
count[k]++;
//统计每个桶中的记录数
for(j=1;
count[j]=count[j-1]+count[j];
//第j个桶以及之前所有桶中元素的总数
for(j=n-1;
j>
=0;
j--){//将所有桶中记录依次收集到tmp中
tmp[count[k]-1]=data[j];
count[k]--;
j++)//将临时数组的内容复制到data中
data[j]=tmp[j];
k<
k++;
data[op]<
radix=radix*10;
free(tmp);
free(count);
voidkuaisu(inta[],intstart,intend)//快速排序
{intop;
cout<
t<
t++;
int
i=start,j=end;
pivot=a[i];
while
(i<
j)
{
j&
&
pivot<
=a[j])
j--;
a[i]=a[j];
a[i]<
=pivot)
i++;
a[j]=a[i];
a[i]=pivot;
if
(i>
start)
kuaisu(a,start,i);
if
end){
kuaisu(a,i+1,end);
voidMerge(inta[],ints,intmid,inte)//归并辅助函数,将两个排列好
{//的数组排好整合到一个数组中
int*b=newint[9];
for(intw=0;
w<
w++)
b[w]=a[w];
int
i=s;
j=mid+1;
k=s;
=mid&
j<
=e)
{
(b[i]<
b[j])
a[k++]=b[i++];
else
a[k++]=b[j++];
while
=mid)
(j<
}
voidMergeSort(inta[],ints,inte)//归并
if(s>
return;
MergeSort(a,s,(s+e)/2);
MergeSort(a,(s+e)/2+1,e);
Merge(a,s,(s+e)/2,e);
p+1<
p++;
for(op=0;
intmain(void){
intch;
kaishi:
cout<
默认待排序数列:
40,91,43,1,66,75,12,108,97"
选择排序方法:
1,选择排序"
2,冒泡排序"
3,插入排序"
4,基数排序"
5,快速排序"
6,归并排序"
cin>
>
ch;
system("
cls"
);
inta1[9]={40,91,43,1,66,75,12,108,97};
inta2[9]={40,91,43,1,66,75,12,108,97};
inta3[9]={40,91,43,1,66,75,12,108,97};
inta4[9]={40,91,43,1,66,75,12,108,97};
inta5[9]={40,91,43,1,66,75,12,108,97};
inta6[9]={40,91,43,1,66,75,12,108,97};
switch(ch){
case1:
xuanze(a1);
break;
case2:
maopao(a2);
case3:
charu(a3);
case4:
jishu(a4,9);
case5:
kuaisu(a5,0,8);
case6:
MergeSort(a6,0,8);
pause"
system("
gotokaishi;
return0;
具体设计和实现:
各函数如上注释。
主函数执行排序方式分支选择。
实验结果:
如下图;
主界面
选择排序
冒泡排序
插入排序(这里显示的是辅助数组)
基数排序(1-个位;
2-十位,3-百位)
快速排序
归并排序(step1{0-2},step2{3-4},step3{0-4},step4{5-6},step5{7-8},step6{5-8},step7{0-8})
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 山东大学 数据结构 实验
![提示](https://static.bdocx.com/images/bang_tan.gif)