【问题标题】:Insertion sorts's problamatic area插入排序有问题的区域
【发布时间】:2018-12-06 03:42:26
【问题描述】:
for(i = 1; i < len; i++){
    for(j = i - 1; j >= 0; --j){
        if(data[j] > data[1 + j]){
            swap(j, j + 1);
        } else {
            break;
        }
    }
}

swap 方法会交换元素。为什么应该是 --j 而不是 j-- ?有什么区别 ?放 j-- 有什么好处?

【问题讨论】:

标签: c algorithm performance sorting insertion-sort


【解决方案1】:

在这种情况下,两者都有效。

在 C++ 中有充分的理由使用 ++i。 由于您使用 C 进行编码,因此选择一个并坚持使用它。

【讨论】:

    【解决方案2】:

    对于基本类型,后缀和前缀递增/递减之间没有性能差异。

    顺便说一下,有更高效的插入排序算法实现,内部循环中只有 1 个赋值(swap 执行 3 个)。

    int i, key, j;
    for (i = 1; i < n; i++)
    {
       key = arr[i];
       j = i-1;
       for (j = i-1; j >= 0 && arr[j] > key; --j) {
           arr[j+1] = arr[j];
       }
       arr[j+1] = key;
    }
    

    【讨论】:

      猜你喜欢
      • 2016-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 2016-10-02
      • 2014-10-03
      相关资源
      最近更新 更多