预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10
亲,该文档总共67页,到这已经超出免费预览范围,如果喜欢就直接下载吧~
如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
问题A:整数排序一时间限制:20Sec内存限制:128MB题目描述经过三天的任务1的训练,大家的确辛苦了.因此,在任务2开始时,我为大家准备了一道令人非常愉快的热身题.即将一个杂乱无序的整数序列,按照从小到大的顺序排列并输出.输入测试数据不止一组,每组测试数据:1)先输入无序序列的整数个数n;(n不超过1000000)2)然后连续输入n个整数;若n的值输入为0值,则输入结束.输出与每组输入的测试数据相对应,输出其按从小到大排好序后的整数序列.注意:每组输出占一行.样例输入10987654321-1588776655330样例输出-11234567893355667788提示本题测试对第10章“内部排序”的理解程度。可采用冒泡排序、插入排序、选择排序、快速排序、希尔排序、堆排序等方法完成此题。警告:目的是让大家熟悉内部排序的各种算法,因此禁止调用sort或qsort等函数!不改正者降最终成绩等级.简单排序版:#include<stdio.h>#include<stdlib.h>#defineSIZE10000voidfastsort(inta[],intn){inti,j,k,temp;for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(a[j]<a[k])k=j;if(i!=k){temp=a[i];a[i]=a[k];a[k]=temp;}}}intmain(){intsort[SIZE];intnum,i;while(1){scanf("%d",&num);if(num==0)exit(0);for(i=0;i<num;i++){scanf("%d",&sort[i]);}fastsort(sort,num);for(i=0;i<num;i++){if(i==num-1)printf("%d",sort[i]);elseprintf("%d",sort[i]);}printf("\n");}return0;}快速排序版:#include<stdio.h>#defineSIZE100000voidquick_sort(inta[],intlow,inthigh){inti,j,t;if(low<high){i=low;j=high;t=a[low];while(i<j){while(i<j&&a[j]>t)j--;if(i<j){a[i]=a[j];i++;}while(i<j&&a[i]<=t)i++;if(i<j){a[j]=a[i];j--;}}a[i]=t;quick_sort(a,low,i-1);quick_sort(a,i+1,high);}}intmain(){intsort[SIZE];intnum,i;while(1){scanf("%d",&num);if(num==0)return0;for(i=0;i<num;i++){scanf("%d",&sort[i]);}quick_sort(sort,0,num-1);for(i=0;i<num;i++){if(i==num-1)printf("%d",sort[i]);elseprintf("%d",sort[i]);}printf("\n");}return0;}堆排序版:#defineMAX10000#include<stdio.h>voidsift(int*x,intn,ints){intt,k,j;t=*(x+s);k=s;j=2*k+1;while(j<n){if(j<n-1&&*(x+j)<*(x+j+1)){j++;}if(t<*(x+j)){*(x+k)=*(x+j);k=j;j=2*k+1;}else{break;}}*(x+k)=t;}voidheap_sort(int*x,intn){inti,k,t;int*p;for(i=n/2-1;i>=0;i--){sift(x,n,i);}for(k=n-1;k>=1;k--){t=*(x+0);*(x+0)=*(x+k);*(x+k)=t;si