簡體   English   中英

飛鏢列表的奇怪行為

[英]Weird behavior with Dart List

List<List<int>> arr = [];

List<int> bubbleSort(List<int> list) {
  for (int i = 0; i < list.length; i++) {
    for (int j = 0; j < list.length - 1; j++) {
      if (list[j] > list[j + 1]) {
        int num = list[j];
        list[j] = list[j + 1];
        list[j + 1] = num;
        arr.add(list);
      }
    }
  }
  return list;
}

void main(){
  bubbleSort([5, 4, 3, 2, 1]);
  print(arr);
}

我在 dart 中實現了冒泡排序,每次交換后我都將列表添加到 arr 但我得到了一個意外的輸出:

[[1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [ 1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5]]

不知何故, arr的所有內容都是相同的。 請解釋如何解決這個問題以及為什么會發生這種情況。

void swap(List<int> arr, int xp, int yp) {
  var temp = arr[xp];
  arr[xp] = arr[yp];
  arr[yp] = temp;
}

List<int> applyBubbleSort(List<int> arr) {
  var n = arr.length;

  for (var i = 0; i < n; i++) {
    for (var j = 0; j < n-i-1; j++) {
      if (arr[j] > arr[j+1]) swap(arr, j, j+1);
    }
  }
  return arr;
}

void main(List<String> args) {
  var result = applyBubbleSort(
    // [5, 3, 1, 9, 8, 2, 4, 7]
    [5, 4, 3, 2, 1]
  );
  print(result);
}

輸出:

[1, 2, 3, 4, 5]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM