21xrx.com
2024-11-08 23:29:52 Friday
登录
文章检索 我的文章 写文章
C++实现数组的分割:将数组分成两部分
2023-07-11 08:33:13 深夜i     --     --
C++ 数组分割 实现

在C++中,实现数组的分割可以使用两种方法:1.使用循环,从数组的第一个元素开始,判断每个元素是否属于第一部分或第二部分;2.使用STL库中的partition函数。

首先看第一种方法的具体实现。我们可以定义两个指针,一个指向数组的首位,一个指向数组的末尾。我们将首位指针向后移动,末尾指针向前移动,直到两个指针相遇。每当首位指针指向的元素不属于第一部分时,我们就将它和末尾指针指向的元素交换位置。这样就能将数组分成两部分,第一部分为首位指针到原末尾指针之间的元素,第二部分为原末尾指针到末位指针之间的元素。下面是代码示例:


void partition_array(int arr[], int length, int pivot) {

  int first = 0;

  int last = length - 1;

  while (first < last) {

    while (first < last && arr[first] < pivot) {

      first++;

    }

    while (first < last && arr[last] >= pivot)

      last--;

    

    if (first < last) {

      std::swap(arr[first], arr[last]);

    }

  }

}

如果使用第二种方法,我们可以使用STL库中的partition函数。该函数会将容器中满足条件的元素移动到容器的前部分,并返回一个指向第二部分的起始位置的迭代器。使用该函数,我们只需要将数组作为参数传入,再通过返回的指针将数组分成两部分。下面是代码示例:


#include <algorithm>

int partition_array(int arr[], int length, int pivot) {

  auto it = std::partition(arr, arr + length, [=](int x) return x < pivot; );

  return it - arr;

}

无论使用哪种方法,都可以很容易地将数组分割成两部分。这个功能在解决一些算法问题时十分常见,比如快速排序、K路归并等。掌握这个技能将有助于提高程序的运行效率。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复