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

这样的分区算法正确吗?

葛胡媚
2023-03-14

我一直在看《破解编码面试》(5E,119页)一书中的分区函数。我将其复制如下:

int partition(int arr[], int left, int right){
    int pivot = arr[(left + right) /2 ]; // Pick pivot point
    while (left <= right) {
        // Find element on left that should be on right
        while (arr[left] < pivot) left++;
        // Find the element on right that should be on left
        while (arr[right] > pivot) right--;
        // Swap elements, and move left and right indicies
        if (left <= right) {
            swap(arr, left, right); // swaps elements
            left++;
            right--;
        }
    }
    return left;
}

给定此数组:

1 2 3 4 5 6 3

1 2 3 3 5 6 4

左=4,右=4。退出

然而,我最后得到的数组是:

1 2 3 3 5 6 4

共有1个答案

钱睿范
2023-03-14

分区的目标是将数组分成两个段。第一个片段包含元素[1,2,3,3]。所有这些值都小于或等于四。第二段包含元素[5,6,4]。所有这些值都大于或等于四。

分区函数返回第二段开始的地方。在本例中,它从索引4开始。

 类似资料:
  • 操作系统实现了各种算法,以便找出链表中的空洞并将它们分配给进程。 关于每种算法的解释如下。 1. 第一拟合算法 第一拟合算法(First Fit)算法扫描链表,每当它找到第一个足够大的孔来存储进程时,它就会停止扫描并将进程加载到该进程中。 该过程产生两个分区。 其中,一个分区将是一个空洞,而另一个分区将存储该进程。 First Fit算法按照起始索引的递增顺序维护链表。这是所有算法中最简单的实现方

  • 问题内容: 我能够使用三个链接来组合一个简化的完整History.js示例,以从整个页面加载内容片段,而无需更新页面和更新浏览器历史记录。 这是相关的代码段- 完整的工作示例在此处http://jsfiddle.net/PT7qx/show 我想知道这是否正确。以前的版本可以使用#url绑定到事件。我没有看到使用此最新版本将事件绑定到url的任何示例,因此我使用了.on()click事件来调用Hi

  • 公共静态无效字(字符串文本){int numWords=1; 字符串“是this_one_long_word还是几个???你觉得怎么样??太多“应该打印10个字和”!这使用periods.as.word.delimiters,可能很棘手。“应该打印10个单词。 描述如下:一个单词是由一个或多个字符组成的序列,由空格或句子终止符(句号、冒号、分号、问号、感叹号)分隔,无论它是否为实际的英语单词。空白

  • 我试图在对数据的某一列执行聚合操作之前对数据进行预分区。我有3个工作节点,我希望每个分区在我分区的列中都有不重叠的值。我不希望出现两个分区在列中可能具有相同值的情况。 例如。如果我有以下数据 那么以下隔墙是令人满意的: 分区1 分区2 分区3 不幸的是,我下面的代码不起作用。 我已经看过了 如何定义数据帧的分区 我还是想不通。

  • null 我相信这个答案是正确的,但我无法证明。有人能证明它为什么起作用或提供一个反例吗?

  • 以下是我的清单片段: 下面是我的style.xml文件