2011级计算机学院课程设计题目及参考程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

问题A: 整数排序一

时间限制: 20 Sec 内存限制: 128 MB

题目描述

经过三天的任务1的训练,大家的确辛苦了.因此,在任务2开始时,我为大家准备了一道令人非常愉快的热身题.即将一个杂乱无序的整数序列,按照从小到大的顺序排列并输出.

输入

测试数据不止一组,每组测试数据:

1)先输入无序序列的整数个数n;(n不超过1000000)

2)然后连续输入n个整数;

若n的值输入为0值,则输入结束.

输出

与每组输入的测试数据相对应,输出其按从小到大排好序后的整数序列.

注意:每组输出占一行.

样例输入

10

9 8 7 6 5 4 3 2 1 -1

5

88 77 66 55 33

样例输出

-1 1 2 3 4 5 6 7 8 9

33 55 66 77 88

提示

本题测试对第10章“内部排序”的理解程度。

可采用冒泡排序、插入排序、选择排序、快速排序、希尔排序、堆排序等方法完成此题。

警告:目的是让大家熟悉内部排序的各种算法,因此禁止调用sort或qsort等函数!不改正者降最终成绩等级.

简单排序版:

#include

#include

#define SIZE 10000

void fastsort(int a[],int n)

{

int i,j,k,temp;

for(i=0;i

{

k=i;

for(j=i+1;j

if(a[j]

k=j;

if(i!=k)

{

temp=a[i];

a[i]=a[k];

a[k]=temp;

}

}

}

int main()

{

int sort[SIZE];

int num,i;

while(1)

{

scanf("%d",&num);

if(num==0) exit(0);

for(i=0;i

{

scanf("%d",&sort[i]);

}

fastsort(sort,num);

for(i=0;i

{

if(i==num-1)

printf("%d",sort[i]);

else

printf("%d ",sort[i]);

}

printf("\n");

}

return 0;

}

快速排序版:

#include

#define SIZE 100000

void quick_sort(int a[], int low, int high)

{

int i, j, t;

if (low < high)

{

i = low;

j = high;

t = a[low];

while (i

{

while ( it)

j--;

if (i

{

a[i] = a[j];

i++;

}

while (i

if (i

{

a[j] = a[i];

j--;

}

}

a[i] = t;

quick_sort(a,low,i-1); quick_sort(a,i+1,high);

}

}

int main()

{

int sort[SIZE];

int num,i;

while(1)

{

scanf("%d",&num);

if(num==0) return 0;

for(i=0;i

{

scanf("%d",&sort[i]);

}

quick_sort(sort,0,num-1);

for(i=0;i

{

if(i==num-1)

printf("%d",sort[i]);

else

printf("%d ",sort[i]);

}

printf("\n");

}

return 0;

}

堆排序版:

#define MAX 10000

#include

void sift(int *x, int n, int s)

{

int t, k, j;

t = *(x+s);

k = s;

j = 2*k + 1;

while (j

{

if (j

j++;

}

if (t<*(x+j)) {

*(x+k) = *(x+j);

k = j;

j = 2*k + 1;

}

else

{

break;

}

}

*(x+k) = t;

}

相关文档
最新文档