0

我正在准备今天安排的期末考试。我的问题是,do-while(swap) 语句在这里做什么?交换是否默认设置为“true”?

我对这段代码的理解是,每次排序都至少迭代一次。内部 for 循环携带关键代码并在传递中执行所有交换。例如,array[count] 被复制到 temp,array[count+1] 被复制到 array[count],array[count] 被复制到 array[count+1]。如果交换了两个元素,则布尔交换设置为 true。外部循环不断迭代,直到它发现交换标志为假。

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);
 }
4

3 回答 3

2

Swap用于检查算法是否仍在排序。如果swap为false,则表示数组已经排序,算法可以结束。

默认情况下(在do-while循环的每次迭代开始时)swap设置为 false 并且true仅在进行交换时才更改为(这意味着数组元素的顺序不正确)。

于 2013-07-25T20:22:21.260 回答
1

Swap变量用于确定算法的结束。如果数组已排序,则不会发生交换并且swap变量将为假,因此排序结束。

变量的默认值swap是未定义的,但这没关系,因为在开始处理数组之前,您在每次迭代中将其分配为 false

于 2013-07-25T20:23:41.333 回答
0

while-do 用于执行 for 循环,直到数组中的元素不应该被交换。如果在 for 循环期间没有发生交换,则对所有元素进行排序。但是,如果在内循环执行期间交换了两个元素,则再次扫描数组以检查结果数组是否已排序。

于 2013-07-25T20:24:03.383 回答