数组存储相同数字两次的数字列表

时间:2017-04-16 02:04:03

标签: c arrays bubble-sort selection-sort

我的程序所做的是它需要从文件中读取一组数字,然后使用选择排序和冒泡排序方法对它们进行排序。当通过冒泡排序方法对其进行排序时,该数组会连续两次列出一个数字。它也总是被复制的第二个数字。我查看是否由于某种原因,这个数字实际上是两次传递给新数组,但事实并非如此。我也尝试了一个不同的输入文件,同样的事情发生在同一个地方。这也切断了列表中的最后一个数字。我的代码中没有看到任何明显导致这种情况发生的事情。

程序调用的列表如下:

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

1 个答案:

答案 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];
        }
    }
}