在Java的传染媒介的泡影排序

时间:2015-12-24 00:40:40

标签: java sorting bubble-sort

我正在创建一个可以使用冒泡排序方法对对象(矢量)进行排序的程序。我在互联网上找到了一个代码,帮助我创建它(在数组中冒泡排序): http://www.programmingsimplified.com/java/source-code/java-program-to-bubble-sort

当我编译程序时,我没有得到任何语法错误,但结果不正确。我认为我在IF声明中犯了一个错误,但我不确定这是否是唯一的错误。这是我运行时获得的结果:

Input number of integers to sort
5
Enter 5 integers
2
0
1
6
4
Sorted list of numbers
1
2
3
3
3

这是我的代码:

import java.util.Scanner;
import java.util.*;
import java.io.*;
class BubbleSortVector {
  public static void main(String []args) {
    int n, c, d, swap;
    Scanner in = new Scanner(System.in);

    System.out.println("Input number of integers to sort");
    n = in.nextInt();

    Vector v ;
    v = new Vector();

    System.out.println("Enter " + n + " integers");

    for (c = 0; c < n; c++) 
      //v.addElement(c);
     v.insertElementAt(in.nextInt(),c);


    for (c = 0; c < ( n - 1 ); c++) {
      for (d = 0; d < n - c - 1; d++) {
        if ((Integer)v.elementAt(d) > (Integer)v.elementAt(d+1)) /* For descending order use < */

        {
          swap = (Integer)v.elementAt(d);
          v.insertElementAt(d+1,d);
          v.insertElementAt(swap,d+1);

        }
      }
    }

    System.out.println("Sorted list of numbers");

    for (c = 0; c < n; c++) 
      System.out.println(v.elementAt(c));
  }
}

3 个答案:

答案 0 :(得分:3)

    // ...
    Vector<Integer> v = new Vector<>();
    // ...
    for (c = 0; c < (n - 1); c++) {
        for (d = 0; d < n - c - 1; d++) {
            if (v.get(d) > v.get(d + 1)) {
                swap = v.get(d);
                v.set(d, v.get(d + 1));
                v.set(d + 1, swap);
            }
        }
    }
    // ...

答案 1 :(得分:0)

您的以下代码错误,在索引d+1处插入d表示您正在使用循环索引/计数器的值到向量中,而不是{{1}处的实际值}

d+1

将中间线变为:

swap = (Integer)v.elementAt(d);
v.insertElementAt(d+1,d);    // this is incorrect, d is the index/loop counter
v.insertElementAt(swap,d+1);

答案 2 :(得分:0)

您可以通过简单的交换方法解决它。在循环后打印数组。

        int[] Array = new int[5]{2 , 0 , 6 , 1 , 4};

        int temp = 0;
        for (int i = 0; i < Array.Length; i++)
        {
            for (int j = 0; j < Array.Length - 1; j++)
            {
                if (Array[j] > Array[j + 1])
                {
                    temp = Array[j + 1];
                    Array[j + 1] = Array[j];
                    Array[j] = temp;
                }
            }             
        }