Concept
주어진 요소 집합에 대해 어떤 배열이 병합 정렬의 최악의 경우로 이어질지 결정합니까?
점근적으로 병합 정렬은 항상 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
Method
병합 정렬을 위한 최악의 입력 집합을 구축하는 방법을 연구합니다.
이제 우리는 상향식 방식으로 배열을 구축하려고 합니다.
이제 정렬된 배열을 {11, 12, 13, 14, 15, 16, 17, 18}로 둡니다.
병합 정렬에 대한 최악의 시나리오를 구성하려면 위의 정렬된 배열을 초래하는 병합 작업에서 가장 많은 비교가 발생해야 합니다. 따라서 병합 작업에 참여하는 왼쪽 하위 배열과 오른쪽 하위 배열은 정렬된 배열의 요소를 교대로 저장해야 하며, 왼쪽 하위 배열은 {11, 13, 15, 17}, 오른쪽 하위 배열은 {12, 14, 16이어야 합니다. , 18 }. 이렇게 하면 배열의 각 요소가 최소한 한 번 비교되어 최대 비교 횟수가 발생합니다. 이제 왼쪽 하위 배열과 오른쪽 하위 배열에도 동일한 논리를 구현합니다. 배열 {11, 13, 15, 17}의 경우 왼쪽 하위 배열이 {11, 15}이고 오른쪽 하위 배열이 {12, 14, 16, 18}인 경우 최악의 경우가 발생합니다. , 최악의 경우는 {12, 14} 및 {16, 18}에서 발생합니다.
Full Algorithm
GenerateWorstCase(arr[])
이제 왼쪽과 오른쪽에 두 개의 보조 배열을 만들고 그 안에 교대로 배열 요소를 저장합니다.
GenerateWorstCase - 왼쪽 하위 배열을 호출합니다.
오른쪽 하위 배열에서 generateWorstCase - 생성WorstCase(오른쪽)를 호출합니다.
이제 왼쪽 하위 배열과 오른쪽 하위 배열의 모든 요소를 복사합니다. 원래 배열을 반환합니다.
예
데모
// 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

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

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

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

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

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

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

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


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

WebStorm Mac 버전
유용한 JavaScript 개발 도구

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경
