検索
ホームページバックエンド開発C++C でのマージ ソートの最悪のシナリオにつながる順列を見つけます。

C でのマージ ソートの最悪のシナリオにつながる順列を見つけます。

コンセプト

特定の要素セットについて、どの配置がマージ ソートの最悪のシナリオをもたらすかを判断します。

マージ ソートには漸近的に常に O(n log n) 時間がかかることがわかっていますが、実際には、より多くの比較が必要な状況では通常、さらに時間がかかります。ここで、基本的に、一般的なマージ ソート アルゴリズムを実装するときに比較の数を最大化する入力要素の配置を決定する必要があります。

#例

次の要素セットを並べ替えられた配列として考えます。 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

マージソートの最悪のシナリオとなる入力配列は 11 19 15 23 13 21 17 25 12 20 16 24 14 22 18 26

メソッド

マージソートの最悪のシナリオ 入力コレクション?

ここで、ボトムアップ方式で配列を構築してみます。

次に、ソートされた配列を {11, 12, 13, 14, 15, 16, 17, 18} とします。

マージ ソートの最悪のシナリオを構築するには、上記のソートされた配列を生成するマージ操作で最も多くの比較が行われる必要があります。したがって、マージ操作に参加する左の部分配列と右の部分配列は、ソートされた配列の要素を交互に格納する必要があります。左の部分配列は {11, 13, 15, 17}、右の部分配列は {12, 14, 16 である必要があります。 、18}。こうすることで、配列の各要素が少なくとも 1 回比較され、比較回数が最大になります。次に、同じロジックを左側のサブ配列と右側のサブ配列にも実装します。配列 {11, 13, 15, 17} の場合、最悪のケースは、左側のサブ配列が {11, 15} で、右側のサブ配列が {13, 17} である場合に発生します。配列 {12, 14, 16, 18} の場合は、最悪のケースが発生します。 , 最悪のケースは {12, 14} と {16, 18} で発生します。

完全なアルゴリズム

GenerateWorstCase(arr[])

  • 次に、左右に 2 つの補助配列を作成し、保存します。配列要素を交互に配置します。

  • GenerateWorstCase を呼び出します - 左側のサブ配列で GenerateWorstCase (左)

  • #右側のサブ配列で GenerateWorstCase を呼び出します - GenerateWorstCase (右)
  • 次に、左右の部分配列のすべての要素を元の配列にコピーします。

デモンストレーション

// C program to generate Worst Case of Merge Sort
#include <stdlib.h>
#include <stdio.h>
// Indicates function to print an array
void printArray(int A1[], int size1){
   for (int i = 0; i < size1; i++)
      printf("%d ", A1[i]);
   printf("</p><p>");
}
// Indicates function to join left and right subarray
int join(int arr1[], int left1[], int right1[],
int l1, int m1, int r1){
   int i; // So used in second loop
   for (i = 0; i <= m1 - l1; i++)
      arr1[i] = left1[i];
   for (int j = 0; j < r1 - m1; j++)
      arr1[i + j] = right1[j];
}
// Indicates function to store alternate elemets in left
// and right subarray
int split(int arr1[], int left1[], int right1[],
int l1, int m1, int r1){
   for (int i = 0; i <= m1 - l1; i++)
      left1[i] = arr1[i * 2];
   for (int i = 0; i < r1 - m1; i++)
      right1[i] = arr1[i * 2 + 1];
}
// Indicates function to generate Worst Case of Merge Sort
int generateWorstCase(int arr1[], int l1, int r1){
   if (l1 < r1){
      int m1 = l1 + (r1 - l1) / 2;
      // creating two auxillary arrays
      int left1[m1 - l1 + 1];
      int right1[r1 - m1];
      // Storing alternate array elements in left
      // and right subarray
      split(arr1, left1, right1, l1, m1, r1);
      // Recursing first and second halves
      generateWorstCase(left1, l1, m1);
      generateWorstCase(right1, m1 + 1, r1);
      // joining left and right subarray
      join(arr1, left1, right1, l1, m1, r1);
   }
}
// Driver code
int main(){
   // Initializes sorted array
   int arr1[] = { 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26 };
   int n1 = sizeof(arr1) / sizeof(arr1[0]);
   printf("Sorted array is </p><p>");
   printArray(arr1, n1);
   // generating worst Case of Merge Sort
   generateWorstCase(arr1, 0, n1 - 1);
   printf("</p><p>Input array that will result in " "worst case of merge sort is </p><p>");
   printArray(arr1, n1);
   return 0;
}

出力

Sorted array is
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
Input array that will result in worst case of merge sort is
11 19 15 23 13 21 17 25 12 20 16 24 14 22 18 26

以上がC でのマージ ソートの最悪のシナリオにつながる順列を見つけます。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はtutorialspointで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
如何在 iPhone 上将 Google Drive、OneDrive、DropBox 添加到文件应用程序如何在 iPhone 上将 Google Drive、OneDrive、DropBox 添加到文件应用程序Feb 02, 2024 pm 04:48 PM

在iOS上的"文件"应用默认显示两个存储位置:iCloud云盘和"我的iPhone上"。此外,当您使用第三方存储应用如Google云端硬盘时,您还可以通过"文件"应用直接浏览这些存储服务中的文件。无论是存储在iCloud还是第三方应用中,"文件"应用提供了便捷的方式来管理和访问您的文件。这为用户带来了更大的灵活性和便利性,使他们能够轻松地浏览和组织他们的文件。无论您选择使用哪个存储服务,"文件"应用都为您提供了一个集中管理文件的地方,使您能够更高效地进行文件管理。本文将介绍如何在iPhone上将

火狐浏览器如何添加书签工具栏火狐浏览器如何添加书签工具栏Feb 01, 2024 pm 02:18 PM

火狐浏览器如何添加书签工具栏?我们想要在火狐浏览器中添加书签工具栏要如何操作,下面介绍下!我们平时使用火狐浏览器上网的时候会收藏一些需要的书签,这样我们就可以随时使用,比较方便快捷。有些用户想要在火狐浏览器中添加书签工具栏应该如何添加,小编下面整理了火狐浏览器添加书签工具栏具体步骤,不会的话,跟着我一起往下看吧!火狐浏览器添加书签工具栏具体步骤1、首先点击火狐浏览器主界面右上角的按钮2、在下拉菜单栏中,点击更多工具。3、点击定制工具栏3、在定制工具栏中,选择要添加的工具图标然后拖动到右上角排列处

如何在iPhone上访问文件如何在iPhone上访问文件Feb 02, 2024 pm 04:25 PM

您可以将文件存储在iPhone上,并通过预装的“文件”应用访问它们。在该应用中,您可以浏览并管理所有文档、文件、图像以及从网络下载的其他内容。以下帖子将详细解释如何在iPhone上查找和访问保存的文件。您将了解如何访问不同的存储位置、同步文件与iCloud,并从其他设备上访问它们。如何在iPhone上查找文件检查保存在iPhone上的文件非常简单。只需使用预装在所有iPhone上的AppleFiles应用程序即可。您可以从应用程序库访问它,或者通过在Spotlight上搜索来打开它。如果您无法在

mac黑苹果不能全屏了?mac黑苹果不能全屏了?Feb 02, 2024 pm 03:42 PM

本文将介绍mac黑苹果无法全屏的问题,并提供解决方案。希望对大家有所帮助,请继续阅读。黑苹果分辨率显示不正确可以进行文本编辑。在Finder中找到mac,然后找到其中的extra文件夹。选择以文本编辑方式打开,即可查看其中的内容。对相关数值进行微调即可完成修改。显示器故障是导致黑苹果分辨率识别错误的常见原因之一。分辨率,也称为解析度或解像度,包括显示分辨率、图像分辨率、打印分辨率和扫描分辨率等不同类型。当显示器出现故障时,黑苹果可能无法正确识别分辨率,导致显示效果不佳。因此,确保显示器正常运行对

如何在华硕主板上设置硬盘启动顺序?如何在华硕主板上设置硬盘启动顺序?Jan 31, 2024 pm 02:21 PM

华硕主板怎样设置硬盘启动?一,开机后连续按f2进入华硕主板的bios设置,现在的bios一般都是中文界面,根据提示选择启动,再选择需要启动的硬盘。二,或者开机后直接按f12快捷启动键,弹出的菜单中选择硬盘启动就可以了。华硕主板怎样设置硬盘启动?一,开机后连续按f2进入华硕主板的bios设置,现在的bios一般都是中文界面,根据提示选择启动,再选择需要启动的硬盘。二,或者开机后直接按f12快捷启动键,弹出的菜单中选择硬盘启动就可以了。华硕fl8000u怎么设置硬盘启动?可以设置为在BIOS中进行设

华为手机桌面合并应用新建文件夹方法(一键整理,更的手机桌面管理)华为手机桌面合并应用新建文件夹方法(一键整理,更的手机桌面管理)Feb 02, 2024 pm 05:25 PM

许多用户在如今应用繁多的智能手机时代都面临着管理手机桌面的困扰。华为手机提供了一种方便而高效的方法,即合并应用并新建文件夹,帮助用户轻松整理桌面,提高工作和生活效率。简单操作,轻松合并应用松手即可实现两个应用的合并,这样就能将类似性质的应用放在一起,方便查找和使用,然后将它拖动到另一个应用图标上,在桌面长按一个应用图标。合并后的文件夹自动命名系统会自动为这个文件夹命名、以两个应用的名称进行组合、当你将一个应用图标拖动到另一个图标上合并后。将“音乐”应用与“视频”文件夹的名称就会自动变为,应用合并

使用归并排序算法编写的C/C++程序,用于计算数组中的逆序数使用归并排序算法编写的C/C++程序,用于计算数组中的逆序数Aug 25, 2023 pm 07:33 PM

数组的反转表示;需要进行多少次更改才能将数组转换为其排序形式。当数组已经排序时,需要0次反转,而在其他情况下,如果数组反转,反转次数将达到最大。为了解决这个问题,我们将遵循归并排序方法降低时间复杂度,采用分治算法。输入Asequenceofnumbers.(1,5,6,4,20).输出将数字升序排列所需的反转次数。Herethenumberofinversionsare2.Firstinversion:(1,5,4,6,20)Secondinversion:(1,4,5,6,20)算法merge

mac桌面2放不同的文件(macbook不同桌面)mac桌面2放不同的文件(macbook不同桌面)Feb 01, 2024 pm 08:33 PM

本篇文章将为大家介绍有关于在mac桌面上放置不同文件的内容。希望本文对大家有所帮助,一起来了解吧。如何在苹果电脑mac选择多个文件呢?首先,根据下图箭头所指,点击顶部的【访达】选项。接着,在弹出的菜单栏中选择【新建访达窗口】。第二步,在弹出的窗口中,根据下图箭头所指,先点击左侧的文件夹,然后再点击顶部的【分栏】图标。要选中多个文件,首先打开文件夹并点击选中一个文件。若要选择连续的多个文件,按住键盘上的Shift键,然后点击最后一个文件,在这两个文件之间的多个文件会被一起选中。如果要选择多个不连续

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール