我的程序所做的是它需要从文件中读取一组数字,然后使用选择排序和冒泡排序方法对它们进行排序。当通过冒泡排序方法对其进行排序时,该数组会连续两次列出一个数字。它也总是被复制的第二个数字。我查看是否由于某种原因,这个数字实际上是两次传递给新数组,但事实并非如此。我也尝试了一个不同的输入文件,同样的事情发生在同一个地方。这也切断了列表中的最后一个数字。我的代码中没有看到任何明显导致这种情况发生的事情。
程序调用的列表如下:
10
50
78
83
92
100
0
4
72
3
19
var array = ["31ab12", "20a40", "11abc27"];
array.sort(function(a,b) {
function getEndNum(str) {for (var i=str.length-1; i>=0; --i) {if (isNaN(str.charAt(i))) {return str.substring(i+1);}}} //this function returns the end-number of the supplied string
return getEndNum(b) - getEndNum(a); //sort array descendingly, based on the end-numbers
});
console.log(array.map(function(a){return parseInt(a);})); //create a new array with only the start-numbers
答案 0 :(得分:2)
bubbleSort()
访问数组边界外部。因此未定义的行为(UB)。
for(j = 0; j < size; j++) {
for(i = 0; i < size; ++i) {
if(arr[i] > arr[i+1]) { // Here code access outside bounds when i = size - 1
... Code swaps arr[i], arr[i+1];
}
}
}
相反
for(j = 0; j < size; j++) {
for(i = 1; i < size; ++i) {
if(arr[i-1] > arr[i]) {
... Code swaps arr[i-1], arr[i];
}
}
}