内部排序的基本操作.docVIP

  • 22
  • 0
  • 约7.24千字
  • 约 10页
  • 2018-10-22 发布于山东
  • 举报
内部排序的基本操作.doc

内部排序的基本操作 【实验目的】 掌握排序的有关概念和特点。 熟练掌握直接插入排序、希尔排序、冒泡排序、快速排序、简单选择排序、堆排序、归并排序、基数排序等算法的基本思想。。 关键字序列有序与无序,对于不同的排序方法有不同的影响,通过该实验进一步加深理解。 了解各种排序方法的优缺点和适用范围。 【实验内容】 从键盘输入上述8个整数,存放在数组quick[8]中,并输出值。 输出各种排序算法每一趟排序的结果,观察关键字次序的变化。 如果上述8个整数按照升序输入,即k1={ 2 , 12 , 12 , 21 , 30 , 33 , 45 , 68 },输出各种排序算法每一趟排序的结果,观察关键字次序的变化。 如果上述8个整数按照降序输入,即k2={ 68 , 45 , 33 , 30 , 21 , 12 , 12 , 2},输出各种排序算法每一趟排序的结果,观察关键字次序的变化。 测试各排序算法的执行时间,比较执行效率。 随机产生3万个数,对其进行排序,观察其结果。 #include stdio.h #include stdlib.h #include time.h #define Max 50000 typedef int infotype; typedef int keytype; int rand_sum=30000; int print_flag=1; double time_sum[5]; typedef struct { keytype key; infotype otherinfo; }rectype; typedef struct { rectype r[Max+1]; int length; }seqlist; void shuchu(seqlist l) { int j; if(print_flag) { for(j=1;j=l.length;j++) printf(%d ,l.r[j].key); printf(\n); } } //1.直接插入排序 int insertsort(seqlist l) { int i,j,sum=0; double t_start,t_end; t_start=clock(); for(i=2;i=l.length ;i++) { if(l.r[i].keyl.r[i-1].key) { l.r[0]=l.r[i];//放入哨兵 l.r[i]=l.r[i-1];//后移最后一个元素 for(j=i-2;l.r[0].keyl.r[j].key;j--) l.r[j+1]=l.r[j]; l.r[j+1]=l.r[0]; } if(print_flag) { for(j=1;j=l.length;j++) printf(%d ,l.r[j].key); printf(\n); } } t_end=clock(); printf(begin:%f ,t_start); printf(end:%f ,t_end); printf(%f\n,t_end-t_start); time_sum[0]=t_end-t_start; return 1; } void swap(int m,int n) { int temp; temp=m; m=n; n=temp; } //3.冒泡排序法 int bubblesort(seqlist l) { int i,j,flag=0,sum=0;//flag交换标志,发生交换则为1 double t_start,t_end; t_start=clock(); for(i=1;il.length;i++) { flag=0; for(j=1;jl.length;j++) if(l.r[j].keyl.r[j+1].key){ swap(l.r[j].key,l.r[j+1].key); flag=1; } if(print_flag) { for(j=1;j=l.length;j++) printf(%d ,l.r[j].key); printf(\n); } if(!flag) break; } t_end=clock(); printf(begin:%f ,t_start); printf(end:%f ,t_end); printf(%f\n,t_end-t_start); time_sum[2]=t_end-t_start; return 1; } //2.希尔排序法 int shellinsert(se

文档评论(0)

1亿VIP精品文档

相关文档