按名称对数组进行排序

时间:2015-05-13 11:52:27

标签: java arrays sorting

我希望这些数据按名称排序,我使用以下代码,有人可以告诉我它有什么问题吗?它没有完美地对数据进行排序。

条件是我们必须使用两个while和if循环。

             Sales and Commission
    ======================================================
     Salesperson        Sales Amount        Commission
    -----------------------------------------------------
    h h                 $54000          $4320.0 
    jghu jghf           $90000          $9000.0 
    hg gf               $45000          $2700.0 
    kaushal garg        $87000          $8700.0 
    kfhfuyd dhd         $32000          $1920.0 

     Total: 9 Data entries

代码:

public static void sortByName() {
    int small;      // Two while loop and one if loop for sorting 
    int i = 0;      // the data based on sales amount 
    while (i < name.length) {
        small = i;
        int index = i + 1;
        while (index < name.length) {

            if (name[index].compareToIgnoreCase(name[small]) < 0) { // name comparision for sorting
                small = index;
            }
            swap(i, small); // caling the swap method
            index++;

        }
        i++;
    }
    displayData();              // calling displayData function.
}

//Method used in the sorting the data based on name and sales
public static void swap(int first, int second) {
    String temp = name[first];
    name[first] = name[second];
    name[second] = temp;


}

2 个答案:

答案 0 :(得分:0)

我认为问题是内循环中的交换函数,因为它将始终执行。也许它应该发生在if范围内(根据compareToIgnoreCase()的函数返回,不太确定)。

while (index < name.length) {

            if (name[index].compareToIgnoreCase(name[small]) < 0) { // name comparision for sorting
                small = index;
                swap(i, small); // caling the swap method
            }

            index++;

        }

答案 1 :(得分:0)

您似乎正在尝试实施冒泡排序。首先,没有&#34; if-loop&#34;这是一个if条件。我发现你的变量名很混乱,所以我重命名了它们中的大多数。以下代码应该可以使用。

public static void sortByName() {
    int i = 1;
    while (i < name.length) {
        int j = 0;
        while (j < name.length - i) {
            if (name[j].compareToIgnoreCase(name[j + 1]) > 0) {
                //you should be able to figure out yourself, what to do here        
            }
            j++;
        }
        i++;
    }
    displayData();
}