如何通过使用一些索引来进行有效的合并排序算法

时间:2018-10-24 02:10:48

标签: algorithm sorting

我有这样的合并源代码。

void mergesort(low, high){

     index mid;
     if(low < high){
          mid = (low+high)/2;
          mergesort(low mid);
          mergesort(mid+1, high);
          merge(low, mid, high);
    }
}

void merge(low, high, mid){

     index i = low, j = mid +1, k = low;
     while(i<=mid && j<=high){
          if(S[i] < S[j]) {
               U[k] = S[i];
               i++;
          }else{
               U[k] = S[j];
               j++;
          }
          k++;
     }
     if(i > mid){
          copy S[j] through S[high] to U[k] through U[high]
     }else{
          copy S[i] through S[mid] to U[k] through U[high];
     copy U[low] through U[high] to S[low] through S[high];
}

我想提出一种更有效的方法来调整“索引”。如何提高选择索引的效率?

1 个答案:

答案 0 :(得分:0)

常用合并排序将数组分为两个相等的部分,因为在一般情况下,没有更有效,更简单的策略。

但是在特定情况下,可能会使用natural merge sort-它会根据数据集自动选择拆分方案-对于部分排序的数据,它可能会更有效-选择排序后的元素序列并合并它们,而不会为短片段工作过多。

在一般情况下,与划分相等部分相比,确定此类序列的成本可能会变得很高。