当前位置: 代码迷 >> J2SE >> 冒泡排序小题看一下错在哪里解决方法
  详细解决方案

冒泡排序小题看一下错在哪里解决方法

热度:12   发布时间:2016-04-23 20:31:35.0
冒泡排序小题看一下错在哪里
public class maopaopaixu
{
public static void paixu(int[] args)
{
for(int x=0;x<args.length-1;x++)
{
for(int y = x;y<args.length-1;y++)
{
if(args[y]>args[y+1])
{
int temp = args[y];
args[y] = args[y+1];
args[y+1] = temp;
}
}
}
}

public static void printy(int[] args)
{
for(int x=0;x<args.length;x++)
{
System.out.print(args[x]+";");
}
}

   public static void main(String[] args)
{
   int[] P= {8,3,4,5,18,3};
   paixu(P);
   printy(P);
}
}
输出结果是3;4;3;5;8;18
而我想要的结果是3;3;4;5;8;18
我也不知道错在哪里了。。会的受累告诉我为什么会出现这个错误,怎么修改。。
------解决方案--------------------
应该这么写:
for(int i=0;i<aryLength-1;i++){

for(int j=0;j<aryLength-1-i;j++){
if(array[j]<array[j+1]){
int temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;

}
}

}
------解决方案--------------------
你将你这句代码:
for(int x=0;x<args.length-1;x++)
 {
 for(int y = x;y<args.length-1;y++)
 {
改为
for(int x=0;x<args.length-1;x++)
 {
 for(int y = 0;y<args.length-1-x;y++)
 {
即可,冒泡排序的基本思想大概是:以x为趟数,用y来控制每趟要比较的次数;
比如:
当args.length=5时,第一趟x=0,则内循环中y从0到3,从而比较4次;同理,第2趟,x=1,则内循环中y从0到2,从而比较3次;
以此类推即可。
------解决方案--------------------
你这肯定不行  逻辑混乱了

你这是升序排列 ,第一次x=0时,内层循环执行完毕,找到的是最大数并排列到了数组末尾
第二次x=1是  内层循环却要从数组下标为1的后面的数开始比较大小,而不是从从数组的开始下标为0开始比较,显然不合逻辑
最终造成了排序不正确,正确的内层循环应该是 for(int y = 0;y<args.length-1-x;y++) 
------解决方案--------------------
你的第二层循环出问题了
for (int y = 0; y < args.length-x-1; y++) 

如果你把y初始为x,那后面就不是y的值返回不了第一个
  相关解决方案