求助:将5个数的序列排列,不论原先的顺序如何,最少都可以通过( )次比较,完成从小到大的排序?

2025-03-13 20:43:29
推荐回答(5个)
回答1:

B 7次
第十二届全国青少年信息学奥林匹克联赛初赛试题
( 普及组 C++ 语言 二小时完成 )
选择题第16题

如数为:
A B C D E
分治算法,先比较A B两数排序 1次
C D E排序 3次比较
两组有序的数列再合并排序最坏第一组 1,5
第二组 2,3,4
合并 1,2,3,4,5
从一边开始比较,最多3次
1+3+3=7次

回答2:

呵呵,这道题其实答案都不对,如果采用快速排序,最少可以比较(5-1)次左右即4-5次(取决于中值选择) ,这是目前世界上最高效的排序算法

这道题估计是常规排序吧
选6吧

回答3:

void main()
{ int n,i,j,k,x,a[5];
scanf("%d",&n);
for (i=0;i<5;i++)
scanf("%c , &a[i]");
for (k=1;k for(j=n,i=1;i<=n-k;i++,j--)
if( a[j] < a[j-1])
{x=a[j];a[j]=a[j-1];a[j-1]=x;}

for(i=1;i<=n;i++)
printf("%d",a[i]);
printf("\n");

}

这是对前五个整数从小到大的排列,不知道这是不是你需要的,
你是用字符数组的么?

回答4:

我非常想知道
风の华尔兹 你的4-5次的算法

回答5:

#include
void main()
{
int a[10];
inti,j,t;
printf("input 10 number: \n");
for(i=0;i<10;i++)
scanf("%d",&a);
printf("\n");
for(j=0;j<9;j++)
for(i=0;i<9-j;i++)
if(a+a[i+1])
{
t=a;
a=a[i+1];
a[i+1]=t;
}
printf("the sorted numbers:\n");
for(i=0;i<10;i++)
printf("%d",a);
printf("\n");
}