【问题标题】:Quick sort algorithm using pointers?使用指针的快速排序算法?
【发布时间】:2017-02-27 10:29:46
【问题描述】:

尝试使用指针创建快速排序算法,但运气不佳。我的代码可以编译但不起作用,我对如何纠正这个问题感到困惑。 任何帮助将不胜感激。

int* partition(int* start, int* stop) {
    int* pivot = stop - 1; // you can randomly pick one as the pivot
    int* i = start;
    int* j = stop - 1;
    for (;;) {
        while (i < pivot && i < stop) ++i; // skip "low" on left side
        while (j >= pivot && j > start) --j; // skip "high" on right side
        if (*i >= *j) break;
        swap(i, j); // swap out-of-place items
    }
    swap(*(stop - 1), *i); // swap pivot to the final place i
    return i;
}


void quickSort(int* start, int* stop) {
    if (stop - start <= 1) return;
    int* pivot = partition(start, stop);
    quickSort(start, pivot);
    quickSort(pivot + 1, stop);
}

【问题讨论】:

  • 怎么不工作了?你期待什么,你得到了什么?请描述要解决的问题。
  • 该程序旨在输出算法的类型、数据集的大小和数据集的类型。它目前适用于其他排序函数,但这个函数不返回任何内容。
  • int* pivot = stop - 1;哪里定义了停止?你怎么能确定stop - 1 是一个可用的地址,即你所有的排序值都是连续存储的?
  • swap(i, j); 中,您显然传递了指向函数的指针,而在swap(*(stop - 1), *i); 中,您传递了int 值。你认为哪一个是正确的......?

标签: c++ sorting pointers quicksort


【解决方案1】:

您不应该比较地址的内容而不是地址吗? 具体来说,

while(*i < *pivot)

while(*j >= *pivot)

你也应该交换内容而不是指针。

swap(*i, *j);

从问题中不清楚您想要实现什么。我的回答有一个基本假设,即您要排序的数组元素是连续存储的。

【讨论】:

    【解决方案2】:

    条件i &lt; pivotj &gt;= pivot 比较指针,而您应该在此处比较指向的值

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-05
      • 2020-09-11
      • 2020-06-05
      • 1970-01-01
      • 2020-01-08
      • 1970-01-01
      相关资源
      最近更新 更多