了解Bubble SORT

时间:2015-07-09 09:39:45

标签: c while-loop bubble-sort

didswaps = 1;
while(didswaps){
    didswaps = 0;
    for(i=0; i<n-1; i++) {
        if(A[i]>A[i+1]) {
            int_swap(&A[i], &A[i+1]);
            didswaps = 1;
        }
    }    
}

在那里设置didswaps有什么意义?

5 个答案:

答案 0 :(得分:0)

它检测到工作尚未完成:一旦某些扫描没有进行任何交换,didswaps == 0会导致循环终止,从而节省了不必要扫描的时间。

答案 1 :(得分:0)

如果didswaps仍为0,则意味着每两个邻居元素都被正确排序,因此它会更快地结束排序算法(之前)

答案 2 :(得分:0)

每次重新交换2个元素时,您都会为didswaps分配1个。

当您在循环结束时,您已didswaps > 0进行了修改,且列表未排序。

但如果didswaps == 0您的列表已排序;)

答案 3 :(得分:0)

BubleSort遍历列表,直到不需要交换,这表明列表已排序。

didswaps表示交换是否发生(didswaps = 1)。如果没有发生交换,则列表被排序,因此应该中断while循环(didswaps = 0)。 didswaps用作布尔值,它只能采用值0或1。

答案 4 :(得分:0)

通过观察n - 次传递找到n个最大元素并将其放入最终位置,可以轻松优化冒泡排序算法。因此,在第n-1次运行时,内循环可以避免查看最后的n项。

  

如果特定传递中没有交换,则表示数组已经排序,因此我们不应该执行更多传递。为此,我们可以有一个标志变量,在每次传递之前设置为true,并在执行交换时变为false。

didswaps通过排除不必要的传递来完全实现此优化。