3路随机快速排序分区功能

时间:2018-08-12 12:05:54

标签: c++ quicksort

我正在尝试实现3向随机快速排序算法,并且正在努力弄清楚“分区函数应该是什么样子”。有人可以帮我实现吗?我到目前为止编写的代码:

partition3()

我需要弄清楚1 7 50 5 的功能。

1 个答案:

答案 0 :(得分:1)

即使您在找出问题上没有做太多的工作,这里的答案还是我的答案。该函数的主要思想是将各部分分为3种方式(顾名思义),以便将4 9 4 4 1 9 4 4 9 4 4 1 4这样的数组(如果将4用作枢轴元素)将其分为三部分; 1 1作为第一部分,4 4 4 4 4 4 4 4作为中间部分,9 9 9作为第三部分,因此,我们不会将多余的4进行进一步递归。下面是它的简单实现。在这里,我将用另一个数组返回分割后的数组的各个位置。您可以通过将这些位置作为参考给出的参数来轻松实现此功能。

vector<int> partition3(vector<int> &a, int beg, int end){
  int x = a[beg];
  vector<int> ex(2);
  for(int i=beg; i<=end;){
    if(a[i]<x){
      swap(a[beg],a[i]);
      beg++;i++;
    }else if(a[i]==x){
      i++;
    }else{
      swap(a[i],a[end]);
      end--;
    }
    ex[0]=beg;ex[1]=end;
  }
  return ex;
}

如果您想进一步阅读,请访问GeeksforGeeks网站上有关此主题的示例,并提供更多说明。但是首先尝试理解答案,而不是直接复制任何其他答案。这是相当简单的方法。祝你好运!