数据结构简单选择直接插入快速排序冒泡排序希尔排序堆排序算法比较平台.docx

上传人:b****5 文档编号:6734592 上传时间:2023-01-09 格式:DOCX 页数:14 大小:142.20KB
下载 相关 举报
数据结构简单选择直接插入快速排序冒泡排序希尔排序堆排序算法比较平台.docx_第1页
第1页 / 共14页
数据结构简单选择直接插入快速排序冒泡排序希尔排序堆排序算法比较平台.docx_第2页
第2页 / 共14页
数据结构简单选择直接插入快速排序冒泡排序希尔排序堆排序算法比较平台.docx_第3页
第3页 / 共14页
数据结构简单选择直接插入快速排序冒泡排序希尔排序堆排序算法比较平台.docx_第4页
第4页 / 共14页
数据结构简单选择直接插入快速排序冒泡排序希尔排序堆排序算法比较平台.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

数据结构简单选择直接插入快速排序冒泡排序希尔排序堆排序算法比较平台.docx

《数据结构简单选择直接插入快速排序冒泡排序希尔排序堆排序算法比较平台.docx》由会员分享,可在线阅读,更多相关《数据结构简单选择直接插入快速排序冒泡排序希尔排序堆排序算法比较平台.docx(14页珍藏版)》请在冰豆网上搜索。

数据结构简单选择直接插入快速排序冒泡排序希尔排序堆排序算法比较平台.docx

数据结构简单选择直接插入快速排序冒泡排序希尔排序堆排序算法比较平台

一、试验内容

内部排序算法效率比较平台的设计与实现

二、试验目的

问题描述:

各种内部排序算法的时间复杂度分析结果只给出了算法执行时间的阶,或大概执行时间。

试通过随机的数据比较几种主要的基本算法的关键字比较次数和关键字移动次数,以取得直观感受。

三、流程图

冒泡排序

 

开始

i

k

L.r[j].key

i!

=j

结束

j=k;

intj=i;

k=i+1

inti=1;

k++

L.r[i]L.r[j]

i++

简单选择排序

 

开始

i=2

i<=L.length

L.r[i].key

L.r[0]=L.r[i];

L.r[i]=L.r[i-1];

j=i-2;

L.r[0].key

L.r[j+1]=L.r[j];

--j;

L.r[j+1]=L.r[0]

++i

结束

直接插入排序

 

希尔排序

 

快速排序

 

四、源程序代码

#defineN10

intcompare[6]={0,0,0,0,0,0},change[6]={0,0,0,0,0,0};

voidinput(ints[])

{

inttest[N];

srand((unsigned)time(NULL));

for(inti=0;i

{

test[i]=rand()%100;

for(intj=0;j

while(test[j]==test[i])

{

test[i]=rand()%N;

j=0;

}

}

for(i=0;i<=N-1;i++)

s[i]=test[i];

}

voids&a,int&b)

{

inttmp;

tmp=a;

a=b;

b=tmp;

}

voidinsertsort(ints[])

{

inti,j;

inta[N+1];

for(i=1;i<=N;i++)

{

a[i]=s[i-1];

}

for(i=2;i<=N;i++)

{

a[0]=a[i];

for(j=i;j>0&&a[0]

{

a[j]=a[j-1];

change[0]++;

}

a[j]=a[0];

change[0]++;

}

}

voidbubble_sort(ints[],intn)

{

inti,j,temp,a[N];

for(i=0;i

{

a[i]=s[i];

}

for(i=0;i

{

for(j=0;j

{

compare[1]++;

if(a[j]>a[j+1])

{

temp=a[j];

a[j]=a[j+1];

a[j+1]=temp;

change[1]++;

}

}

}

}

intpartition(inta[],intlow,inthigh)

{

intt,key;

t=a[low];

key=a[low];

while(low

{

while(low=key)

{

high--;

++compare[2];

}

if(low

{

a[low]=a[high];

low++;

change[2]++;

}

while(low

{

low++;

++compare[2];

}

if(low

{

a[high]=a[low];

high--;

change[2]++;

}

a[low]=t;

}

returnlow;

}

voidquicksort(inta[],intlow,inthigh)

{

intkey;

if(low

{

key=partition(a,low,high);

quicksort(a,low,key-1);

quicksort(a,key+1,high);

}

}

voidselectsort(ints[],intn)

{

inti,j,k,a[N];

intt;

for(i=0;i

{

a[i]=s[i];

}

for(i=0;i

{

j=i;

for(k=i+1;k<=n-1;k++)

{

if(a[k]

j=k;

}

if(j!

=i)

{

t=a[i];

a[i]=a[j];

a[j]=t;

change[3]++;

}

}

}

voidshellinsertsort(ints[],intn)

{

inti,k,a[N];

k=int(n/2);

for(i=0;i

{

a[i]=s[i];

}

for(intgap=n/2;gap>0;gap/=2)

{

for(inti=gap;i

{

inttmp=a[i];

intj=i;

for(;j>0&&tmp

{

a[j]=a[j-gap];

compare[4]++;

}

a[j]=tmp;

change[4]++;

}

}

}

voidheap_adjust(intarray[],inti,intlen)

{

intrc=array[i];

for(intj=2*i;j

{

if(j

{

compare[5]++;

if(rc>=array[j])break;

}

array[i]=array[j];i=j;

}

array[i]=rc;

}

voidheap_sort(inta[],intlen)

{

inti;

for(i=(len-1)/2;i>=0;i--)

heap_adjust(a,i,len);

for(i=(len-1);i>0;i--)

{

swap(a[0],a[i]);

change[5]++;//弹出最大值,重新对i-1个元素建堆

heap_adjust(a,0,i-1);

}

}

voidCMyDlg:

:

OnButton1()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

UpdateData(TRUE);

ints[10],a[10];

input(s);

for(inti=0;i

{

a[i]=s[i];

}

CStringstr[100];

for(i=0;i<100;i++)

str[i]=a[i];

for(i=0;i

{

str[i].Format("%i,",a[i]);//把整型数组添加到字符串

m_shuju1+=str[i];

}

insertsort(s);

m_zhijie1=compare[0];

m_zhijie2=change[0];

quicksort(a,0,N-1);

m_kuaisu1=compare[2];

m_kuaisu2=change[2];

selectsort(s,N);

m_jiandan1=compare[3];

m_jiandan2=change[3];

shellinsertsort(s,N);

m_xier1=compare[4];

m_xier2=change[4];

heap_sort(a,N);

m_dui1=compare[5];

m_dui2=change[5];

bubble_sort(s,N);

m_maopao1=compare[1];

m_maopao2=change[1];

CStringstr2[100];

for(i=0;i<100;i++)

str2[i]=s[i];

for(i=0;i

{

str2[i].Format("%i,",a[i]);//把整型数组添加到字符串

m_shuju2+=str2[i];

}

UpdateData(FALSE);

}

五、调试过程

对于算法的设计,除了希尔排序和堆排序之外,都比较简单,要注意每种排序的起始位置和哨兵的位置,便可以正确的排出。

而希尔排序,尽管是直接插入排序的变形,但应该从中间位置开始,从后至前选择,但是在程序上不好编出。

而堆排序,更是难以控制,只好借鉴参考。

六、结果分析

由随机数产生的10个数,排序后的结果如上图所示,可以发现,快速排序和简单选择排序比较次数和交换次数均较少,适合使用。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1