2013-07-15 118 views
0

我正在尝试手动将升序排列为Double Array。我遇到的问题是输出仅列出了顶部的第一个最小值(这是正确的),但列出了其余的值为0.0。 (数值范围从-5到+20)。以下是我在排序时的编码尝试。任何帮助将不胜感激。谢谢。按升序对双数组排序

   int index; 
      double temp; 

      for(index = 0; index < x.length; index++) 
       { 
       for(int j = 0; j < x.length - 1; j++) 
        { 
         if(x[j + 1] < x[j]) 
          { 
          temp = x[j + 1]; 
          x[j + 1] = x[j]; 
          x[j] = temp; 
          } 
         } 
       } 
+2

是否有你不能用'Arrays.sort'理由吗?它的实现将比你提出的要好得多。 –

+0

你的气泡排序的实现几乎是正确的。你可以发布你的完整程序吗?可能是你搞砸了你的输入。 – bsd

回答

1

这几乎是你到达那里的原因。试试这个:

public static void sort(int[] x) { 
    boolean sorted=true; 
    int temp; 

    while (sorted){ 
    sorted = false; 
    for (int i=0; i < x.length-1; i++) 
     if (x[i] > x[i+1]) {      
      temp  = x[i]; 
      x[i]  = x[i+1]; 
      x[i+1]  = temp; 
      sorted = true; 
     }   
    } 

}

但科林是正确的。用Arrays.sort更好。

+0

我理解这个逻辑比我的For循环更好,但我得到了和以前相同的结果。我正在读取文件中的值。我尝试了Arrays.sort(Arrays.sort(x);)但是这导致了一些更奇怪的事情,它列出了最小的值,然后是一串0.0,然后是正确的值列表,以便... –

+0

如果Arrays.sort(x)给了你一堆0.0,那么你很可能在你的数组中有一堆。我怀疑错误是在输入中,而不是在排序代码中。 –

1

你靠近,但你需要比较x [指数]与X [J]:

for (int index = 0; index < x.length - 1; index++) { 
    for (int j = index + 1; j < x.length; j++) { 
    if (x[j] < x[index]) { 
     temp = x[j]; 
     x[j] = x[index]; 
     x[index] = temp; 
    } 
    } 
} 
+0

谢谢,但我尝试了修改的代码,但我得到了和以前相同的结果,0.0作为其他所有结果列出。我正在读取文件中的值。任何想法为什么? –

+0

这可能是代码中其他地方的问题。 – GriffeyDog

+0

啊,谢谢你的帮助。我会继续看着它。 –