当前位置: 首页 > 知识库问答 >
问题:

Quicksort取决于选择Pivot

胡厉刚
2023-03-14

这是我的quicksort算法,包括分区和交换。当我选择数组的最后一个元素(在函数quicksort中:int r=partition(a,n,n);)作为数据透视时工作良好,但当取第一个元素时失败:int r=partition(a,n,s);

void Swap(int a[], int l, int r){
int tmp = a[l];
a[l] = a[r];
a[r] = tmp;
}

int partition(int a[], int n, int p) {
Swap(a, p, n);
int l = 0;
for (int i = 1; i <= n - 1; i++) {
    if (a[i] <= a[n]) {
        l += 1;
        Swap(a, l, i);
        }
    }
Swap(a, p, l + 1);
return l + 1;
}

void quicksort(int a[], int s, int n) {
if (s < n) {
    int r = partition(a, n, n);
    quicksort(a, s, r - 1);
    quicksort(a, r + 1, n);
    }
}

共有1个答案

齐铭
2023-03-14

是的,问题出在partition过程中,这个过程是正确的:

int partition(int a[], int p, int r) {
int t = a[r];
int i = p - 1;
for (int j = p; j < r;j++){
    if (a[j] <= t) {
        i += 1;
        std::swap(a[i], a[j]);
    }
}
std::swap(a[i + 1], a[r]);
return i + 1;

}

 类似资料:
  • 问题内容: 我需要具有2个字段的django modelform,其中第二个字段选择列表取决于在第一个字段中选择的内容。我的模特: 如果vehicle_type设置为 personal, 如何将 make 字段的选择设置为 PERSONAL_MAKES ?我怎样才能做到这一点?在模型级别上可以吗? __ 问题答案: 您可能不能,因为这取决于用户与表单的交互:您的服务器无法预先知道用户将表单发送到浏

  • 问题内容: 我试图根据我选择的字段之一的值显示和隐藏一些表单字段。我希望使用数组来保存每个选择值应显示的内容和不应该显示的内容,以免将我从庞大的switch语句中删除,但无法弄清楚该如何做。 我正在使用PHP和jQuery。任何帮助都会很棒。 问题答案: 尝试这样的事情: 然后在jQuery中:

  • 我想修改QuickSort(在Java中),这样每次调用Partition时,都会以比例数组的中值作为支点。 我在Java中有一个中值选择算法,它返回第k个最小的元素,在本例中是中值。我有大量的java快速排序算法,它们都可以独立工作,对数组进行排序。不幸的是,我不能结合这两者来实现上述目标...每次我尝试它,我通常得到堆栈溢出错误。 任何人都可以向我展示代码,看看它是如何完成的吗? 谢谢 编辑:

  • 我在谷歌和堆栈溢出研究这个答案有很多答案,但我不能得到我想要的。 我有两个下拉菜单和三个文本框。 PHP代码: 脚本代码: 在“FirstDropDownClick()”中,我需要以下代码: 1.根据所选值从数据库中选择数据。 2.在文本框中填入该选项。 3.根据第一个下拉菜单的值填写第二个下拉菜单。 我需要一个示例代码。因为我被卡住了,不知道怎么办。 提前谢谢。

  • 编辑:Calrification-标签内容是窗格(VBox,GridPane,等等),所以直接在内容上设置ContextMenu是不可能的。

  • 我在MySQL中有一个用户列表,在订阅时,使用current_timestamp在数据库中设置时间戳。 现在,我想从这个表中选择订阅日期,其中订阅日期介于X天和Y天之间。我尝试了几次查询,但不知怎么的,它们都是空的。 这是我最后的版本 正如我确定的,这个日期:2013-10-08 14:38:49在subscribe_data字段中,它应该会以某种方式出现 做这件事最好的方法是什么? 最好知道我的