注册 登录
编程论坛 新人交流区

冒泡排序!!运行总出错!

jisg_57 发布于 2007-11-03 14:43, 597 次点击

/*冒泡排序*/
void maoposort(int a[],int n)
{
int i,j,t;
for(i=0;i<n;i++)
{
for (j=0;j<=n-i;j++)
{
if(a[j]>a[j+1])
{ t=a[j];a[j]=a[j+1];a[j+1]=t;}
}
}

}
void main()
{
int array[10]={1,2,54,21,8,78,65,47,0,4},i;
maoposort(array,10);
for(i=0;i<10;i++)
printf("%4d",array[i]) ;
getch();
}

14 回复
#2
米色zip2007-11-03 16:00

冒泡排序哦,有什么错误??
我电脑上调试没问题哦..

#3
jisg_572007-11-03 18:38

不会吧,我又运行了一遍,错误还是在啊,数组中元素在排序后78根本没有出现,而多了个数组中没有的元素。望高手再仔细看看。

#4
yixiaowz2007-11-03 20:11

void maoposort(int a[],int n)
{
int i,j,t;
for(i=0;i<n;i++)
{
for (j=0;j<=n;j++)
{
if(a[i]>a[j])
{ t=a[i];a[i]=a[j];a[j]=t;}
}
}

}
void main()
{
int array[10]={1,2,54,21,8,78,65,47,0,4},i;
clrscr();
maoposort(array,10);
for(i=0;i<10;i++)
printf("%4d",array[i]) ;
getch();
}
修改了下,没问题了哦。

#5
颠峰对绝2007-11-03 20:52
肯定错误啊原因就是for循环越界了啊
改成这样
for( int i=0;i<n-2;i++)
{
for(int j=0;j<n-1-i;j++)
这样再运行就可以了是试一下啊

#6
qiuchengw2007-11-03 21:23
5楼的也不对啊,
应该是for( i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
#7
tianxia_buaa2007-11-03 23:10
我试了,是正确的......
#8
ping160022007-11-03 23:22
好象那个j不是等于0的哦
#9
禾今2007-11-04 02:16

呵呵 简单的冒泡 引起如此争论 学术问题吗?这个也算吧。我也贴一个:
void BubbleSort(int a[],int n) /*a[] begins with a[0],n is the num */
{
int i,j,t;
for(i=0;i<n-1;i++)
{
for (j=0;j<=n-i-2;j++)
{
if(a[j]>a[j+1]) /*from small to big*/
{ t=a[j];a[j]=a[j+1];a[j+1]=t;}
}
}

}
void main()
{
int array[10]={1,2,54,21,8,78,65,47,0,4},i;
BubbleSort(array,10);
for(i=0;i<10;i++)
printf("%4d",array[i]) ;
getch();
}
请注意边界问题,以及i,j分别起的作用,然后就可以写出正确的程序了

#10
nigma2007-11-04 10:33

改编到vs2005中的
using System;
using System.Collections.Generic;
using System.Text;

namespace 函数集
{
class Program
{
static void Main(string[] args)
{
int[] array=new int[10]{1,2,54,21,8,78,65,47,0,4};
BubbleSort(array,10);

}

static void BubbleSort(int[] a, int n) /*a[] begins with a[0],n is the num */
{
int i,j,t;
for(i=0;i<n-1;i++)
{
for (j=0;j<=n-i-2;j++)
{
if(a[j]>a[j+1]) /*from small to big*/
{ t=a[j];a[j]=a[j+1];a[j+1]=t;}
}
}
for (i = 0; i < n - 1; i++)
{
Console.Write("{0} ",a[i]);
}
}


}
}

#11
nigma2007-11-04 10:46

也可以不这样写
用另外一种方法

namespace _.__1
{
class Program
{
public Program(ref int[] a,int n)
{
Console.WriteLine("原顺序为:");
for(int i=0;i<n;i++)
Console.Write("{0} ",a[i]);
Console.WriteLine("");
Console.WriteLine("按冒泡法排序之后的顺序为:");
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
if (a[i]>a[j])
{
int t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
for(int i=0;i<n;i++)
Console.Write("{0} ",a[i]);
}
static void Main(string[] args)
{
int[] array=new int[10]{1,2,54,21,8,78,65,47,0,4};
Program sd=new Program(ref array,10);
Console.ReadLine();
}

}
}

[此贴子已经被作者于2007-11-4 10:49:58编辑过]

#12
毛山道士2007-11-04 15:21
禾今的方法我感觉是对的啊,j应该从i-1还是取的。
#13
giant6112007-11-04 17:38
学习氛围浓重
#14
yzh72712007-11-05 18:13

应该把
for (j=0;j<=n-i;j++)
改为
for (j=0;j<n-i;j++)
就可以了。

#15
yzh72712007-11-05 18:33

/*冒泡排序*/
void maoposort(int a[],int n)
{
int i,j,t;
for(i=0;i<n;i++)
{
for (j=0;j<=n-i;j++)
{
if(a[j]>a[j+1])
{ t=a[j];a[j]=a[j+1];a[j+1]=t;}
}
}

}

也可以改为

/*冒泡排序*/
void maoposort(int a[],int n)
{
int i,j,t;
for(i=0;i<n;i++)
{
for (j=n-1;j>=i;j--)
{
if(a[j]<a[j-1])
{ t=a[j];a[j]=a[j-1];a[j-1]=t;}
}
}

}

1