按字母顺序排序数组的问题

时间:2017-03-27 23:40:55

标签: java arrays sorting

我目前正在尝试按字母顺序对一组国家进行排序,但是我有一个排序问题,因为最后一个国家/地区放在数组的开头,弄乱了排序。除此之外,它的工作原理。让我们说阵列有这些值=“阿富汗”,“巴西”,“波斯尼亚和黑塞哥维那”,“赞比亚”,“土耳其”。

这是我的排序代码:

int i;
int j;
String temp;


for(i=0;i<length;i++){
  for(j=1;j<length;j++){
    if(countryList[i].compareToIgnoreCase(countryList[j])<0)
    {
      temp=countryList[i];
      countryList[i]=countryList[j];
      countryList[j]=temp;
    }
  }    //
}

5 个答案:

答案 0 :(得分:1)

for循环条件的问题应该是:

for(i=0;i<length-1;i++)
  for(j=i+1;j<length;j++)

在outter循环中,你应该跳过数组的最后一个索引,因为你将在内循环中将它与i+1索引进行比较。

答案 1 :(得分:1)

您没有正确实施冒泡排序。你可以从索引0迭代一次但是它可能(如果应该是第一个的元素实际上是最后一个)你将需要从索引0开始n次以使元素到达开始。正确的实施应该是:

boolean swapped = false;
do {
    for each element
        if needs to swap 
            swap
            swapped = true
} while (swapped);

答案 2 :(得分:1)

如前所述,问题是内部for循环。 j必须设置为i + 1

还有另一个问题:你的比较是错误的。这按字母顺序升序排序:

for (i = 0; i < length; i++) {
    for (j = i + 1; j < length; j++) {
        if (countryList[i].compareToIgnoreCase(countryList[j]) > 0) { // >0 instead of <0
            temp = countryList[i];
            countryList[i] = countryList[j];
            countryList[j] = temp;
        }
    }
}

但由于插入排序相对较慢,我建议您使用Arrays.sort

答案 3 :(得分:0)

你的内循环向后看。

中将1更改为i+1
for(j=1;j<length;j++){

答案 4 :(得分:0)

问题出现在第二个for循环中:

for(j=1;j<length;j++){

考虑一下 - 让我们说我们在第四次迭代,所以i = 3。尽管i的值为j,但您在1开始j。因此,i小于for(j=i+1;j<length;j++){ 。这意味着您将最终反转先前已正确排序的结果。将其更改为以下内容:

j

现在,i将始终大于 $.ajax({ method: "POST", url: baseUrl + postUser, data: userObject, contentType: "application/json", success: function () { ...

编辑 - 请参阅@sprinter的答案,确保您的实施实际上是正确的。