【问题标题】:Intro to C++: Sorting codeC++ 简介:对代码进行排序
【发布时间】:2013-07-26 04:27:46
【问题描述】:

我正在准备今天安排的期末考试。我的问题是,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);
 }

【问题讨论】:

  • 为什么swap 最初是什么很重要?下一条语句将其设置为 false。

标签: c++


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    Swap 变量用于判断算法结束。如果数组已排序,则不会发生交换,swap 变量将为 false,因此排序结束。

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-09
        • 1970-01-01
        • 2018-04-15
        • 2021-01-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多