我正在学习今天的期末考试。我的问题是,do-while(swap)语句在这里做了什么?默认情况下交换设置为“true”吗?
我对这段代码的理解是,它对每次排序都至少迭代一次。内部for循环包含关键代码并执行传递中的所有交换。例如,将array [count]复制到temp中,将array [count + 1]复制到array [count]中,将array [count]复制到array [count + 1]中。如果交换了两个元素,则将bool swap设置为true。外部循环不断迭代,直到找到交换标志为false。
void sortArray(int array[], int size)
{
int size;
bool swap;
do
{
swap = false;
for(int count = 0; count < (size -1); count++)
{
if(array[count] > array[count+1])
{
temp = array[count];
array[count] = array[count+1];
array[count+1] = temp;
swap = true;
}
}
}while(swap);
}
答案 0 :(得分:2)
Swap
用于检查算法是否仍在排序。如果swap
为false,则表示数组已经排序,算法可以完成。
默认情况下(在do-while
循环的每次迭代开始时)swap
设置为false,只有在进行交换时它才会变为true
(这意味着数组元素不是按顺序排列。
答案 1 :(得分:1)
Swap
变量用于确定算法的结束。如果数组已排序,则不会发生交换,swap
变量将为false,因此排序结束。
swap
变量的默认值未定义,但无关紧要,因为在从beggining处理数组之前,在每次迭代中将其指定为false
答案 2 :(得分:0)
while-do用于执行for循环,直到不应交换数组中的元素。如果for循环期间没有发生交换,则排序所有元素。但是,如果在执行内部循环期间交换了两个元素,则再次扫描该数组以检查结果数组是否已排序。