当前位置: 首页 > 编程笔记 >

可以单独排序以使用C ++进行排序的最大分区数

计承德
2023-03-14
本文向大家介绍可以单独排序以使用C ++进行排序的最大分区数,包括了可以单独排序以使用C ++进行排序的最大分区数的使用技巧和注意事项,需要的朋友参考一下

我们给定N个数字的数组,元素位于0和N-1范围内。元素未排序。目标是找到可以单独排序的数组的最大分区数量,然后可以将其串联起来以构成一个完整的长度为N的排序数组。

选择每个分区以使其中的元素未排序。对于介于0到N-1之间的N个数字,排序后的元素的索引等于该值。Arr [i] = i。

我们将通过将每个元素与到目前为止在其左侧找到的最大值进行比较来解决此问题。当到达最大值的正确位置时(maximum == i)。左侧的所有元素都较少,因此可以创建一个单独的分区。它右边的一切都更大。现在,对其余正确的元素执行相同的过程,并将它们划分为多个分区。

让我们通过示例来理解。

输入− Arr [] = {0,3,2,1,4,5}

输出-最大分区数-3

说明-从0开始,令max = 0 Arr [0]

在索引0和3之间。最大为3。当到达索引i = 3(maxx == i)时。所以第一个分区是[0,3,2,1]

对于索引4,最大值为4。索引i = 4(maxx == i)。所以第二个分区是[4]

对于索引5,最大值为5。索引i = 5(maxx == i)。所以第二个分区是[5]

总共3个分区[0,3,2,1] [4] [5]。排序每个并连接。

输入-Arr [] = {5,4,3,2,1,0}

输出-最大分区数-1

说明-从0开始,令max = 0 Arr [0]

在索引0和5之间。最大为5。当到达索引i = 5(maxx == i)时。所以只有分区是[5,4,3,2,1,0]

以下程序中使用的方法如下

    list-paddingleft-2">
  • 我们采用整数数组Num []初始化,其数字范围为0到N。

  • 函数partitions(int arr [],int n)将一个数组及其长度作为参数,并返回可以单独排序以使整个数组排序的最大分区数。

  • 初始分区计数为0。初始最大值在maxx中为arr [0]。

  • 对于从最左边的元素开始的所有元素。查找是否大于maxx。

  • 如果arr [i]> maxx为true。更新maxx。

  • 如果当前的maxx和index相同。(maxx == i),那么直到i的所有元素都是一个分区的一部分。增量计数。

  • 对右边的所有其他元素执行此操作,直到结束。

  • 返回结果作为计数。

示例

#include <bits/stdc++++.h>
using namespace std;
int partitions(int arr[], int n){
   int count = 0;
   int maxx = arr[0];
   for (int i = 0; i < n; ++i) {
      if(arr[i] > maxx)
         maxx=arr[i];
      if (maxx == i)
         count++;
   }
   return count;
}
int main(){
   int Num[] = { 2,1,0,4,5,3 };
   int len = 6;
   cout <<"Maximum partitions that can be sorted: "<<partitions(Num, len);
   return 0;
}

输出结果

如果我们运行上面的代码,它将生成以下输出-

Maximum partitions that can be sorted: 18
 类似资料:
  • 本文向大家介绍Java程序以区分大小写的顺序对数组进行排序,包括了Java程序以区分大小写的顺序对数组进行排序的使用技巧和注意事项,需要的朋友参考一下 可以使用java.util.Arrays.sort()方法以区分大小写的顺序对数组进行排序。在这种情况下,此方法仅需要单个参数,即要排序的数组。演示此的程序如下所示- 示例 输出结果 现在让我们了解上面的程序。 首先定义数组arr []。然后打印未

  • 我注意到一件非常奇怪的事情。 读完这节课后,我在C中实现了一些堆排序代码。 代码如下。 奇怪的是,对我来说,构建min堆-提取min(或在构建min堆后在根目录下执行min-heapify)应该按升序进行。然而,在执行此代码并打印出结果向量后,我得到: 在试图弄清楚发生了什么的时候,我改变了 到 最终选择较大(或最大)的父节点和子节点,得到的向量为: 我是否做错了什么,或者我对堆/堆排序的理解不清

  • 本文向大家介绍编写Golang程序以使用冒泡排序对数组进行排序,包括了编写Golang程序以使用冒泡排序对数组进行排序的使用技巧和注意事项,需要的朋友参考一下 定义:冒泡排序是最简单的排序算法,通过以错误顺序重复交换相邻元素来工作。 例子 输入arr = [7、5、1、6、3] 第一次迭代=> swap(7,5)=> swap(7,1)=> swap(7,6)=> swap(7,3)=> [5,1

  • 问题内容: 我在mongodb作为数据库的nodejs(express)中的一个项目中非常努力地工作。当我使用sort()获取所有数据时,它以错误的方式返回数据,所以有办法按我期望的那样正确地设置其格式,如下所示:如果我们在数据库中有三个记录: 我现在得到的是: 2,3,1系列数据 我期望会是:1,2,3 这意味着在不添加新列的情况下可以排序的情况下将忽略大小写。 问题答案: 您需要在 这里使用

  • 问题内容: 我在向量的Java API中找不到任何排序功能。 仅用于而不是用于。 我不想编写自己的排序功能,因为我认为Java应该实现此功能。 我正在寻找类似的东西: 问题答案: 根据API文档,仅实现,所以我不预见问题。可能是因为您按照旧的Java 1.0样式声明了才引起您的困惑: 而不是在接口之前声明它(这是一种好习惯): 因此,您可以利用来对集合进行排序,定义默认的订购行为和/或定义外部可控

  • 问题内容: 我想创建一个(非匿名)函数,该函数按键按字母顺序对对象数组进行排序。我只编写简单的JavaScript代码,因此框架至少没有帮助我。 问题答案: 这个怎么样? 这使您可以指定用于对数组进行排序的键,这样您就不仅限于硬编码的名称排序。它将对所有共享属性的对象数组进行排序,这些属性将用作键。我相信那是您要找的东西?