目录一种简单的数组分区方法一些有趣的事实如果您喜欢此文章请收藏、点赞、评论谢谢祝您快乐每一天。给定一个数组任务是以最后一个元素为枢轴元素对数组进行分区。arr[]数组的划分必须满足以下两个条件数组中小于或等于枢轴元素的元素排在枢轴元素之前。数组中大于枢轴元素的元素会出现在枢轴元素之后。注意可能存在多个分区数组。例如输入arr[] [5, 13, 6, 9, 12, 11, 8]输出[5, 6, 8 , 13, 9, 12, 11]说明所有小于枢轴元素 [5, 6] 的元素都排列在枢轴元素 [5, 6] 之前所有大于枢轴元素 [13, 9, 12, 11] 的元素都排列在枢轴元素 [13, 9, 12, 11] 之后。输入arr[] [4, 10, 9, 8, 16, 19, 9]输出[4, 9, 8, 9 , 10, 16, 19]说明所有小于或等于枢轴元素 [4, 9, 8] 的元素都排列在其前面所有大于枢轴元素 [10, 16, 19] 的元素都排列在其后面。一种简单的数组分区方法一种简单的数组分区方法是创建一个新的临时数组来存储重新排列后的元素。在这种方法中我们首先遍历原始数组并将所有小于或等于基准元素的元素添加到临时数组中。然后我们将基准元素添加到临时数组中。最后我们将大于基准元素的元素填充到临时数组的剩余部分。这样可以确保较小的元素位于枢轴元素之前较大的元素位于枢轴元素之后。现在将临时数组中的元素复制回原始数组。示例代码// C program to partition the array// using naive partition approach#include iostream#include vectorusing namespace std;// Function to partition the array according// to pivot index elementvoid partition(vectorint arr) {int n arr.size();// Last element will be the pivot valueint pivot arr[n - 1];// create a temp array to store the elements in ordervectorint temp(n);int idx 0;// First fill element smaller than or equal to// pivot, into the temp arrayfor (int i 0; i n; i) {if (arr[i] pivot)temp[idx] arr[i];}// Now fill the elements greater than pivotfor (int i 0; i n; i) {if (arr[i] pivot)temp [idx] arr[i];}// copy the elements from temp to arrarr temp;}int main() {vectorint arr {5, 13, 6, 9, 12, 11, 8};partition(arr);for (int i 0; i arr.size(); i)cout arr[i] ;return 0;}输出5 6 8 13 9 12 11时间复杂度O(n)用于数组遍历辅助空间复杂度O(n)因为它使用了临时数组。一些有趣的事实它是一种稳定的分区算法这意味着它可以保持重复元素的相对顺序。我们可以通过使用它来使快速排序保持稳定。它比其他分区算法慢因为它需要多次遍历数组并且需要额外的空间来存储元素。我们可以通过交换第一个元素和最后一个元素然后使用相同的代码轻松地修改算法将第一个元素或任何其他元素视为枢轴。如果您喜欢此文章请收藏、点赞、评论谢谢祝您快乐每一天。