搜尋
首頁後端開發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 }。這樣,數組的每個元素將至少被比較一次,從而導致最大比較次數。現在我們對左子數組和右子數組也實作相同的邏輯。對於數組{11, 13, 15, 17},最壞情況發生在其左子數組為{11, 15},右子數組為{13, 17},對於數組{12, 14, 16, 18},最壞情況發生在{12, 14} 和{16, 18}。

完整演算法

GenerateWorstCase(arr[])

  • 現在我們建立兩個輔助數組left 和right,並將交替的數組元素儲存在它們中。

  • 我們對左子數組呼叫GenerateWorstCase - GenerateWorstCase (left)

  • ##我們對右子數組呼叫GenerateWorstCase - GenerateWorstCase (right)

  • 現在我們將左子數組和右子數組的所有元素複製回原始數組。

範例

 示範

// 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中文網其他相關文章!

陳述
本文轉載於: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、在定制工具栏中,选择要添加的工具图标然后拖动到右上角排列处

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

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

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

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

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

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

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

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

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

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

使用归并排序算法编写的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

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境