




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、二、程序及主要程序解析:/* vim: set ts=4 sw=4: */#inelude <stdio.h>#include <stdlib.h>#include <string.h>#include <time.h>/交换元素次数/原始数组宏定义#define num 300 int count;int anuml;void menu()system("cls");printf(mn排序算法示例nh);printf(nntl.冒泡排序n“);printf(nt2.选择排序n”);printf("t3.插入排序n&
2、quot;);printf(ht4.快速排序n”);printf(ht5.希尔排序n”);printf("to.退出演示nn");retum;void traverse(int a|j,int n) int i,t=l;printf("nall numbers in the arrayn");for (i=0; i<num; i+)生成随机数输出数每15个数一行输击冒泡排序定义变量printf(m%4d ”,ai); if (+% 15=0) putcharcxn1);putcham'vn');return;void bubbles
3、ort(int a,int n)rear,i,temp j,counter;rear= n1;for(counter=0;counter<n 1 ;counter+) for(j=0;j<rear;j+)if(au>au+l) temp=aj;auj=au+l; aj+l=temp;count+;rear-;return;void selectsort(int a,int n)int ij,t,min;for (i=0; i<n-l; i+) min = i;for (j=i+l; j<n; j+) if (a|j<amin) min = j;if(min!
4、=i)t = aij;ai = amin; afmin = t; count+;return;void insertsort(int a,int n)intfor (i=l; i<n; i+)t = ai;for (j=i; t<aj-l&&j>0; j) aj = aj-l; aj-ll = t;count+4-;return;void quicksort(int a,int n)int *l=a,*r=a+n-1 ,t=a0;计数器增加交换次数选择排序定义变量进行循环设最小值为ij在i后面将数组两两比较将小的数放在前面最小值不等于ai进行交换计数器随即增加
5、插入排序定义变量进行循环扫描数组借助三方进行比较将较小的元素与子序中的元素交换计数器增加快速排序定义指针从前向后从后向前讦(l>=r) return; while (l<r)进行顺序表分割while (l<r && *r>=t) r;*1 = *r;while (l<r && *l<=t) 1+;将逐渐减小,并逐次比较pw)与t,直到发 现一个将p(r)<t为止,将p(r)移动到p(l)的位置匕将i逐渐增大,并逐次比较p(l)与t,直到发 现一个将pw>t为止,将p(l)移动到p(c的位置上。指针与将1同一个位置(
6、尸1)为止count += 2;*1 = t;quicksort(aj-a);quicksort(l+1 ,a+n-l-l);希尔排序void shellsort(int aflint n)int gap,ij,t;for (gap=n/2; gap>0; gap/=2)/ h二n/2k (k=12,log2n)其中 n 为代排序的序列长度for (i=gap; i<n; i+)for (j=i-gap; j>=o&&aj>aj+gapl; j-=gap)进行比较t = a|jj;aj = a|j+gap; 叩+gap = t; count+;交换位置r
7、eturn;/*主函数*/ int main(void)int i,op,tnum;srand(unsigned)time(null); for (i=0; i<num; i+)ail = rand()%1000;domenu();定义变量,数组 产生伪随机数, 循环,产生数组 对随机数整数化用时间函数返回值作为种子进行菜单功能的函数printf(nn原始数据nn);traverse(a,num);函数调用,函数的遍历printf(nnlnput your choice(0-5): u); scanf(h%du,&op);输入选择项switch (op)用switch语句进行选择
8、 case 0: printf(hprogram exiting.an");break;case 1: count = 0;全局变量初始化memcpy(t,a,num*sizeof(int);调用函数复制数组bubblesort(t,num);冒泡排序 遍历数组 进行新的排序printf(”交换元素次数为 %d.nu,count);traverse(t,num);/遍历新的数组 输lh排序结果break;case 2: count = 0;memcpy(t,a,num*sizeof(int);selectsort(t,num); printfc咬换元素次数为%d.nh,count);
9、traverse(t,num);break;case 3: count = 0;memcpy(t,a,num*sizeof(int);insertsort(t,num); printfc '交换元素次数为 %d.n°,count);traverse(t,num);break;case 4: count = 0;memcpy(t,a,num*sizeof(int);quicksort(t,num);printf(”交换元素次数为 %d.n",count);traverse(t,num);break;case 5: count = 0;memcpy(t,a,num*si
10、zeof(int);shellsort(t,num);printf(”交换元素次数为 %d.nh,count);traverse(t,num);break;default:printf("wrong choice!n");break;system(',pauseh); while (op);return 0;三、修改前的排序程序及函数结构程序:#include<stdio.h>/ / 希尔排序#define max 14intg4=5,3,l,0);void shellsort(int number)int ij,k,gap,t=0,temp;gap=g
11、rtl;起始步长为5while(gap>0)for(k=0;k<gap;k+)for(i=k+gap;i<max;i+=gap)for(j=i-gap;j>=k;j-=gap)for(numberj>numberj4-gap)temp=n umber j;numberj =numberj+gap; nu mberlj+gap二 temp;else break;printf(*涉长为d时的序列为:n",gap); for(i=0;i<max;i+)printf(h%4dh,numberi); printf(nnn);t+;gap=gt;int mai
12、n()int numbermax二39,80,76,41,13,29,7&30,11,100,7,41,86,i;printf(”初始序列:nm); for(i=0;i<max;i+)printf("%4d'numberi);printf(“n”); shellsort(number);#include<stdlib.h># include<iostream>#define n 300main() int i;int on; for(i=0;i<n;i+) oi=(l 00+rand()/l 00;是求正整数/主函数定义变量i和数组
13、0循环生成300个数(!00+rand()/100生成一个数rand()范围是-90-32767printfc*输出随机生成的300个数:n”); for(i=0;i<n;i+) 循环 printf(”4d”,oi);输出 300 个数getchar();int main()inton;int i,j,temp;printf(”输出随机生成的300个数:n“); for(i=0;i<n;i 卄)循环printf(”4d”,oi);输出 300 个数 for(i=l;i<n;i+)for(n-l;j>=l;j-)if(oj<ou-l)temp=oj 1 ;oj=tc
14、mp;oj 1 =oj;printf(7n输出排序的300个数:n“); for(i=0;i<8;i+)printf(”d,oi);#include<stdio.h>/int menu();int insertsort();/声明菜单功能的函数int bubblesort(); int quicksort(); int selectsort(); int shellsort(); int main()int a; a=menu();switch (a)case1:insertsort(); break;case2:bubblesort(); break;case3:quick
15、sort(); break;case4:selectsort(); break;case5:shellsort(); break;case0:break;/ if(a=o)break;int menu()int choice;值为1,直接插入排序值为2,冒泡法排序值为3,快速排序值为4,直接选择排序值为5,希尔排序值为6,结束程序n);printf( "tl:printf( nt2:insert sort直接插入排序n ”);bubble sort冒泡法排序n “);printf( "t3:quick sort 快速排序n “);printf(%*select 怜t怜t怜printf( nt4:straight selection sort 直接选择排序n ");printf( "t5:shell sort 希尔排序n ”);printf( ht6: exitn h);printf(n l/,) scanf( n%d n,&choice);输入整数16 选择排序方式int insertsort()printf(n insert sort 直接插入排序n n);int bubblesort
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度农业产业化委托担保合同模板
- 2025单位定向知识产权转让合同协议
- 2025年度新型防火窗材料采购合同模板
- 2025产品宣传册设计制作与品牌战略规划合同
- 2025年新型城镇化建设项目合作开发合同
- 2025年度炊事员职业素养培训及聘用管理合同
- 服装代理商合同协议范本
- 未签劳动合同赔偿金协议
- 欠条合同范本2025
- (2025年标准)云联惠协议书
- 香港公司章程范本中文
- 数据治理与合规性试题及答案
- 人教版高中地理选择性必修一-4.2洋流(第1课时)(教学设计)
- 2024年公安机关理论考试题库500道附参考答案【基础题】
- 阿尔茨海默病药物治疗指南(2025)解读
- 心脏永久起搏器植入术病人护理查房
- 粮油保管员(高级)职业技能鉴定参考试题(附答案)
- GB/T 196-2025普通螺纹基本尺寸
- 新课标下初高中数学教学的衔接研究
- 2024-2025学年人教版二年级体育下册全册教案
- 2025年初升高高中自主招生考试化学试卷试题(含答案详解)
评论
0/150
提交评论