【问题标题】:Parity of the Number of Swaps of Swap-Based Sorting Algorithms基于交换的排序算法交换次数的奇偶性
【发布时间】:2020-09-12 08:59:29
【问题描述】:

如果我有一个从0n-1 的整数的排列,并且我想按升序对排列进行排序,那么无论是什么基于交换的排序方法都是真的吗使用时,在所有基于交换的排序方法中,排序所需的交换次数的奇偶校验是否相同?

例如,考虑我在下面提供的基于交换的排序方法,用 C++ 编写:

(注意:pos[i] 存储列表中元素“i”的当前索引(从 0 开始)

int cnt = 0; // stores the number of operations
  for (int i = 0; i < n; i++) {
    if (pos[i] != i) {
      cnt++;
      int temp = a[i];
      int temp_pos = pos[i];
      swap(a[i], a[pos[i]]);
      pos[i] = i;
      pos[temp] = temp_pos;
    }
  }

与其他基于交换的排序方法相比,当在相同的排列上执行时,基于交换的排序算法(如上述算法)是否具有相同的排序所需交换数的奇偶校验?从0n-1 的整数?

【问题讨论】:

    标签: c++ sorting c++11 permutation swap


    【解决方案1】:

    是的,这是真的。证明的草图是这样的。

    元素序列中的反转是任何未按正确排序顺序的元素对:即,a[i] &gt; a[j] 对某些i &lt; j。完全排序的数组有零反转。交换任意两个元素会使反转的总计数改变奇数(这一点的证明留给读者练习)。因此,如果数组最初有奇数次反转,则必须执行奇数次交换才能对其进行排序;如果它以偶数次反转开始,则需要偶数次交换。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-09
      • 2019-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-05
      相关资源
      最近更新 更多