C语言冒泡排序的问题高手看下下面的程序哪里错了

来源:百度知道 编辑:UC知道 时间:2024/05/15 17:54:46
下面这个程序 是冒泡排序 程序运行没问题 但是结果不对 高手来看看是什么问题 急 在线等

#include <stdio.h>
#define n 5
void main(){
int i,j,temp;
int a[] = {20,45,10,43,19};
printf("未排序的数组是:\n");
for(i = 0;i < n;i++){
printf("%d ",a[i]);
}
for(i = 0;i < n;i++){
for(j = 0;j < n - i - 1;j++){
if(a[i] < a[i + 1]){
temp = a[i + 1];
a[i + 1] = a[i];
a[i] = temp;

}
}

}
printf("\n排序后的数组是:\n");
for(i = 0; i < n;i++){
printf("%d ",a[i]);
}
printf("\n");

}
下面说的改了程序本身还是没问题 但是结果不对 要把数组从大到小排序 高手在帮帮忙啊

原因:排序的两个循环混乱,改正后源程序如下:
#include <stdio.h>
#define n 5
void main(){
int i,j,temp;
int a[] = {20,45,10,43,19};
printf("未排序的数组是:\n");
for(i = 0;i < n;i++)
{
printf("%d ",a[i]);
}
for(i = 0;i < n-1;i++)
{
for(j = i+1;j <n;j++)
{
if(a[i] < a[j])
{
temp = a[j];
a[j] = a[i];
a[i] = temp;
}
}
}
printf("\n排序后的数组是:\n");
for(i = 0; i < n;i++){
printf("%d ",a[i]);
}
printf("\n");

}
这样就行了!

for(i = 0;i < n;i++)中的n没有定义,
后面好多n,所以会错啊。

上面太乱了..方法不对..改成现在这样看看结果吧..
自大代进去的时候看看括号的顺序

for(i = 0;i < n;i++)
for(j = i+1;j < n - i ;j++)
{
if(a[i] < a[j])
{
temp = a[j];
a[j] = a[i];
a[i] = temp;
}
}

是不是只输出了数组中的四个数?
在两次输出循环中,将“for(i = 0; i < n;i