我目前正在尝试按字母顺序对一组国家进行排序,但是我有一个排序问题,因为最后一个国家/地区放在数组的开头,弄乱了排序。除此之外,它的工作原理。让我们说阵列有这些值=“阿富汗”,“巴西”,“波斯尼亚和黑塞哥维那”,“赞比亚”,“土耳其”。
这是我的排序代码:
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;
}
} //
}
答案 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的答案,确保您的实施实际上是正确的。