关于一个C语言程序的冒泡排序问题

来源:百度知道 编辑:UC知道 时间:2024/06/22 01:44:49
首先我是按数组名初始化这个数组的各个元素
就是按0 1 2 3 4 5 6 7 8 9输出
后来我重新给这个数组的每个元素输入值
再将新数组降序排列
#include <stdio.h>

void main()

{
int m[10];
int i,j,tmp;
printf("初始化的数组m[10]各项的值为:\n");
for (i=0;i<10;i++)
{
m[i]=i;
printf("%d\t",m[i]);
}
printf("现在要求你给数组m[10]各项重新赋值:\n");
for (i=0;i<10;i++)
{
scanf("%d",&m[i]);
}
printf("新赋值的数组m[10]各项降序排列后为:\n");
for (i=10;i>0;i--)
{
for (j=9;j>0;j--)
{
if(m[j]>m[j-1])
{
tmp=m[j];
m[j]=m[j-1];
m[j-1]=tmp;
}
}
}
for (i=0;i<10;i++)
{
printf("%d\t",m[i]);
}
}
--------------------------------------
上面是代码

for (i=10;i>0;i--)
{
for (j=9;j>0;j--)
{
if(m[j]>m[j-1])
{

呵呵。你好。看你写的程序。真的厉害。给我一种别扭的感觉。我一般冒泡法排序都是这样
假设数组bb有cnt个数组元素,tmp是声明的变量
for(i=0;i<cnt-1;i++)
for(j=i+1;j<cnt;j++)
if(bb[i]>bb[j])
{tmp=bb[i];bb[i]=bb[j];bb[j]=tmp;}
我用这个方法排序出来百发百中。
虽然我知道你只不过是颠倒过来了,论方法,方法正确。但是总感觉别扭呀。或许这就是所谓的逻辑错误?也说不定。(其实建议你改过来。因为我看三级考试的很多上机题目中都是这样比较。从没有颠倒过来的)

数组越界

的确是数组越界,C语言的下标从0开始,十个元素下标最大也只有9.

其次,你的代码给出的是大数冒泡,第一轮比较完之后应该是10 1 2 3 4 5 6 7 8 9.

楼上给出的方法计算量更少只要比较45次,而你的代码需要比较81次(如果正确运行的话).

N人不少啊