冒泡排序的问题,怎么排序,怎么理解
#include<stdio.h>
void main(){
int i,j,n,a[10];
printf("输入10个数:");
for(i=0;i<10;i++)
scanf("%d,",&a[i]);
for(i=0;i<n-1;i++)
for(j=i;j<n;j++)
if(a[i]>a[j])
{n=a[i];a[i]=a[j];a[j]=a[i];}
printf("由小到大的排序结果为:\n");
for(i=0;i<10;i++)
printf("%d",a[i]);
}
为什么程序的结果不能够排序好呢?还有
for(i=0;i<n-1;i++)
for(j=i;j<n;j++)
if(a[i]>a[j])
{n=a[i];a[i]=a[j];a[j]=a[i];}
这部分怎么理解,不太懂。
#include<stdio.h>
void main(){
int i,j,x,n,a[50];
printf("n(<50)=");scanf("%d",&n);
printf("input %d integers:\n",n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n;i++)
for(j=n-1;j>=i;j--)
if(a[j]<a[j-1])
{x=a[j];a[j]=a[j-1];a[j-1]=x;}
printf("the result is:\n");
for(i=0;i<n;i++)
printf("%d",a[i]);
printf("\n");
getch();
}
中的
for(i=0;i<n;i++)
for(j=n-1;j>=i;j--)
if(a[j]<a[j-1])
{x=a[j];a[j]=a[j-1];a[j-1]=x;}
这部分怎么理解?还有为什么要用for去接受输入的数呢?
你问的问题让我感觉你是刚刚开始接触c语言吧?用的是Win-tc编译器?*(win-tc编译器的注释得用/*......*/我用的是//,,如果你用win-tc的话,要把注释的符号修改一下,否则会报错。)你应该是不理解冒泡排绝逗序才会这么问问题的。。。下面附上冒泡排序的核心算法,以及for循环输入部分也有注释。。已经编译运行成功了的,还有不懂的请追问。。。(数腔樱组的输入当然要用for循环啊~~~~~)希望对你有帮助。。。。
#include <stdio.h>
void main()
{
int a[5];
int i,j,temp;
//循环输入
for(i=0;i<5;i++)
{
scanf("%d",&a[i]);//利用for循环依次输入数组的每一个值
}
//冒泡排序算法
for(i=0;i<5;i++) //一共有5个数,需要比较5次
{
for(j=0;j<5-i;j++) //这5个数、每个数需要比较5-i次并圆卖(就是与它前面已经排好了序的数比)
{
if(a[j]>a[j+1]) //如果前面的数比后面的数大,两个数交换位置
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
//循环输出
for(i=0;i<5;i++)
{
printf("%d ",a[i]);
}
}