代码之家  ›  专栏  ›  技术社区  ›  Dandgerson

JavaScript冒泡排序修改(循环“for”的条件不起作用)

  •  0
  • Dandgerson  · 技术社区  · 7 年前

    当循环“j”的if语句返回时,循环“i”必须中断 swap = false arr.length

    bubble sort pen link

    var arr = [0, 1, 2, 4, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13];
    var n = arr.length;
    var t;
    var swap;
    
    for (var i = 0; (i < n) && (swap = true); i++) {
    for (var j = 0; j < ( n - (i + 1) ); j++) {
    
    
        if ( arr[j] > arr[j + 1] ) {
    
            t = arr[j + 1];
            arr[j + 1] = arr[j];
            arr[j] = t;
            swap = true;
    
        } else { swap = false }
    }
    };
    
    3 回复  |  直到 7 年前
        1
  •  0
  •   duncan smith    7 年前

    这条线

    for (var i = 0; (i < n) && (swap = true); i++) {
    

    为swap指定一个值(即swap=true),而实际上您需要检查其值(即swap) ===

    请注意,swap最初是未定义的,因此如果您按照上述方法更改代码(swap==true),则可能需要在进入循环之前将其显式设置为true。

        2
  •  0
  •   Laurent Plantrose    7 年前

    Have a look here

    var arr = [0, 1, 2, 4, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13];
    var n = arr.length;
    var t;
    var swap = true;
    
    for (var i = 0; i < n; i++) {	
    	if (!swap) {
    		break;
    	}
    	for (var j = 0; j < ( n - (i + 1) ); j++) {
    		if ( arr[j] > arr[j + 1] ) {
    			t = arr[j + 1];
    			arr[j + 1] = arr[j];
    			arr[j] = t;
    		} else {
    			swap = false;
    		}
    	}
    };
    alert(performance.now());
    alert(arr);
        3
  •  0
  •   Community CDub    4 年前

    correct answer by duncan smith

    这条线

    for (var i = 0; (i < n) && (swap = true); i++) {
    

    为swap指定一个值(即swap=true),而实际上您需要检查其值(即,swap===true)。