数据结构简单选择直接插入快速排序冒泡排序希尔排序堆排序算法比较平台.docx
《数据结构简单选择直接插入快速排序冒泡排序希尔排序堆排序算法比较平台.docx》由会员分享,可在线阅读,更多相关《数据结构简单选择直接插入快速排序冒泡排序希尔排序堆排序算法比较平台.docx(14页珍藏版)》请在冰豆网上搜索。
数据结构简单选择直接插入快速排序冒泡排序希尔排序堆排序算法比较平台
一、试验内容
内部排序算法效率比较平台的设计与实现
二、试验目的
问题描述:
各种内部排序算法的时间复杂度分析结果只给出了算法执行时间的阶,或大概执行时间。
试通过随机的数据比较几种主要的基本算法的关键字比较次数和关键字移动次数,以取得直观感受。
三、流程图
冒泡排序
否
是
假
真
开始
ikL.r[j].keyi!=j结束j=k;intj=i;k=i+1inti=1;k++L.r[i]L.r[j]i++简单选择排序 真真假假真假开始i=2i<=L.lengthL.r[i].keyL.r[0]=L.r[i];L.r[i]=L.r[i-1];j=i-2;L.r[0].keyL.r[j+1]=L.r[j];--j;L.r[j+1]=L.r[0]++i结束直接插入排序 希尔排序 快速排序 四、源程序代码#defineN10intcompare[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;jwhile(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:AddyourcontrolnotificationhandlercodehereUpdateData(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个数,排序后的结果如上图所示,可以发现,快速排序和简单选择排序比较次数和交换次数均较少,适合使用。
kL.r[j].keyi!=j结束j=k;intj=i;k=i+1inti=1;k++L.r[i]L.r[j]i++简单选择排序 真真假假真假开始i=2i<=L.lengthL.r[i].keyL.r[0]=L.r[i];L.r[i]=L.r[i-1];j=i-2;L.r[0].keyL.r[j+1]=L.r[j];--j;L.r[j+1]=L.r[0]++i结束直接插入排序 希尔排序 快速排序 四、源程序代码#defineN10intcompare[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;jwhile(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:AddyourcontrolnotificationhandlercodehereUpdateData(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个数,排序后的结果如上图所示,可以发现,快速排序和简单选择排序比较次数和交换次数均较少,适合使用。
L.r[j].keyi!=j结束j=k;intj=i;k=i+1inti=1;k++L.r[i]L.r[j]i++简单选择排序 真真假假真假开始i=2i<=L.lengthL.r[i].keyL.r[0]=L.r[i];L.r[i]=L.r[i-1];j=i-2;L.r[0].keyL.r[j+1]=L.r[j];--j;L.r[j+1]=L.r[0]++i结束直接插入排序 希尔排序 快速排序 四、源程序代码#defineN10intcompare[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;jwhile(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:AddyourcontrolnotificationhandlercodehereUpdateData(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个数,排序后的结果如上图所示,可以发现,快速排序和简单选择排序比较次数和交换次数均较少,适合使用。
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].keyL.r[0]=L.r[i];L.r[i]=L.r[i-1];j=i-2;L.r[0].keyL.r[j+1]=L.r[j];--j;L.r[j+1]=L.r[0]++i结束直接插入排序 希尔排序 快速排序 四、源程序代码#defineN10intcompare[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;jwhile(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:AddyourcontrolnotificationhandlercodehereUpdateData(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个数,排序后的结果如上图所示,可以发现,快速排序和简单选择排序比较次数和交换次数均较少,适合使用。
L.r[0]=L.r[i];
L.r[i]=L.r[i-1];
j=i-2;
L.r[0].keyL.r[j+1]=L.r[j];--j;L.r[j+1]=L.r[0]++i结束直接插入排序 希尔排序 快速排序 四、源程序代码#defineN10intcompare[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;jwhile(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:AddyourcontrolnotificationhandlercodehereUpdateData(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个数,排序后的结果如上图所示,可以发现,快速排序和简单选择排序比较次数和交换次数均较少,适合使用。
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;jwhile(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:AddyourcontrolnotificationhandlercodehereUpdateData(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个数,排序后的结果如上图所示,可以发现,快速排序和简单选择排序比较次数和交换次数均较少,适合使用。
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:AddyourcontrolnotificationhandlercodehereUpdateData(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个数,排序后的结果如上图所示,可以发现,快速排序和简单选择排序比较次数和交换次数均较少,适合使用。
a[j]=a[j-1];
change[0]++;
a[j]=a[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:AddyourcontrolnotificationhandlercodehereUpdateData(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个数,排序后的结果如上图所示,可以发现,快速排序和简单选择排序比较次数和交换次数均较少,适合使用。
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:AddyourcontrolnotificationhandlercodehereUpdateData(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个数,排序后的结果如上图所示,可以发现,快速排序和简单选择排序比较次数和交换次数均较少,适合使用。
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:AddyourcontrolnotificationhandlercodehereUpdateData(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个数,排序后的结果如上图所示,可以发现,快速排序和简单选择排序比较次数和交换次数均较少,适合使用。
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:AddyourcontrolnotificationhandlercodehereUpdateData(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个数,排序后的结果如上图所示,可以发现,快速排序和简单选择排序比较次数和交换次数均较少,适合使用。
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:AddyourcontrolnotificationhandlercodehereUpdateData(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个数,排序后的结果如上图所示,可以发现,快速排序和简单选择排序比较次数和交换次数均较少,适合使用。
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:AddyourcontrolnotificationhandlercodehereUpdateData(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个数,排序后的结果如上图所示,可以发现,快速排序和简单选择排序比较次数和交换次数均较少,适合使用。
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:AddyourcontrolnotificationhandlercodehereUpdateData(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个数,排序后的结果如上图所示,可以发现,快速排序和简单选择排序比较次数和交换次数均较少,适合使用。
a[high]=a[low];
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:AddyourcontrolnotificationhandlercodehereUpdateData(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个数,排序后的结果如上图所示,可以发现,快速排序和简单选择排序比较次数和交换次数均较少,适合使用。
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:AddyourcontrolnotificationhandlercodehereUpdateData(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个数,排序后的结果如上图所示,可以发现,快速排序和简单选择排序比较次数和交换次数均较少,适合使用。
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:AddyourcontrolnotificationhandlercodehereUpdateData(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个数,排序后的结果如上图所示,可以发现,快速排序和简单选择排序比较次数和交换次数均较少,适合使用。
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:AddyourcontrolnotificationhandlercodehereUpdateData(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个数,排序后的结果如上图所示,可以发现,快速排序和简单选择排序比较次数和交换次数均较少,适合使用。
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:AddyourcontrolnotificationhandlercodehereUpdateData(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个数,排序后的结果如上图所示,可以发现,快速排序和简单选择排序比较次数和交换次数均较少,适合使用。
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:AddyourcontrolnotificationhandlercodehereUpdateData(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个数,排序后的结果如上图所示,可以发现,快速排序和简单选择排序比较次数和交换次数均较少,适合使用。
inttmp=a[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:AddyourcontrolnotificationhandlercodehereUpdateData(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个数,排序后的结果如上图所示,可以发现,快速排序和简单选择排序比较次数和交换次数均较少,适合使用。
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:AddyourcontrolnotificationhandlercodehereUpdateData(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个数,排序后的结果如上图所示,可以发现,快速排序和简单选择排序比较次数和交换次数均较少,适合使用。
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:AddyourcontrolnotificationhandlercodehereUpdateData(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个数,排序后的结果如上图所示,可以发现,快速排序和简单选择排序比较次数和交换次数均较少,适合使用。
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个数,排序后的结果如上图所示,可以发现,快速排序和简单选择排序比较次数和交换次数均较少,适合使用。
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个数,排序后的结果如上图所示,可以发现,快速排序和简单选择排序比较次数和交换次数均较少,适合使用。
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];
str2[i]=s[i];
for(i=0;i{str2[i].Format("%i,",a[i]);//把整型数组添加到字符串m_shuju2+=str2[i];}UpdateData(FALSE);}五、调试过程对于算法的设计,除了希尔排序和堆排序之外,都比较简单,要注意每种排序的起始位置和哨兵的位置,便可以正确的排出。而希尔排序,尽管是直接插入排序的变形,但应该从中间位置开始,从后至前选择,但是在程序上不好编出。而堆排序,更是难以控制,只好借鉴参考。六、结果分析由随机数产生的10个数,排序后的结果如上图所示,可以发现,快速排序和简单选择排序比较次数和交换次数均较少,适合使用。
str2[i].Format("%i,",a[i]);//把整型数组添加到字符串
m_shuju2+=str2[i];
UpdateData(FALSE);
五、调试过程
对于算法的设计,除了希尔排序和堆排序之外,都比较简单,要注意每种排序的起始位置和哨兵的位置,便可以正确的排出。
而希尔排序,尽管是直接插入排序的变形,但应该从中间位置开始,从后至前选择,但是在程序上不好编出。
而堆排序,更是难以控制,只好借鉴参考。
六、结果分析
由随机数产生的10个数,排序后的结果如上图所示,可以发现,快速排序和简单选择排序比较次数和交换次数均较少,适合使用。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1