📜  排序算法-合并排序

📅  最后修改于: 2020-10-15 03:09:03             🧑  作者: Mango

合并排序

合并排序是遵循分而治之的算法。考虑一个n个元素的数组A。该算法分3个步骤处理元素。

  • 如果A包含0或1个元素,则它已经被排序,否则,将A分成元素数量相等的两个子数组。
  • 征服意味着使用合并排序对两个子数组进行递归排序。
  • 合并子数组以形成单个最终排序的数组,以保持数组的顺序。

合并排序的主要思想是,简短列表的排序时间更少。

复杂

Complexity Best case Average Case Worst Case
Time Complexity O(n log n) O(n log n) O(n log n)
Space Complexity O(n)

范例:

考虑以下由7个元素组成的数组。使用合并排序对数组进行排序。

A = {10, 5, 2, 23, 45, 21, 7}

算法

  • 步骤1 :[INITIALIZE] SET I = BEG,J = MID + 1,INDEX = 0
  • 步骤2 :如果ARR [I] MID J <=结束SET TEMP [INDEX] = ARR [J] SET INDEX = INDEX + 1,SET J = J +1 [END OF LOOP] [复制左子数组的剩余元素,如果有的话] ELSE <= MID SET TEMP [INDEX] = ARR [I] SET INDEX = INDEX + 1,SET I = I + 1 [LOOP结束] [IF结束]
  • 步骤4 :[将TEMP的内容复制回ARR] SET K = 0
  • 步骤5 :在K
  • 步骤6 :退出

MERGE_SORT(ARR,BEG,END)

  • 步骤1 :如果BEG
  • 步骤2 :结束

C程序

#include
void mergeSort(int[],int,int);
void merge(int[],int,int,int);
void main ()
{
    int a[10]= {10, 9, 7, 101, 23, 44, 12, 78, 34, 23};
    int i;
    mergeSort(a,0,9);
    printf("printing the sorted elements");
    for(i=0;i<10;i++)
    {
        printf("\n%d\n",a[i]);
    }
    
}
void mergeSort(int a[], int beg, int end)
{
    int mid;
    if(begmid)
    {
        while(j<=end)
        {
            temp[index] = a[j];
            index++;
            j++;
        }
    }
    else 
    {
        while(i<=mid)
        {
            temp[index] = a[i];
            index++;
            i++;
        }
    }
    k = beg;
    while(k

输出:

printing the sorted elements 

7
9
10
12
23
23
34
44
78
101

Java程序

public class MyMergeSort
{
void merge(int arr[], int beg, int mid, int end)
{

int l = mid - beg + 1;
int r = end - mid;

intLeftArray[] = new int [l];
intRightArray[] = new int [r];

for (int i=0; i

输出:

Sorted array 
23
23
23
34
45
65
67
89
90
101

C#程序

using System;
public class MyMergeSort
{
void merge(int[] arr, int beg, int mid, int end)
{

int l = mid - beg + 1;
int r = end - mid;
        int i,j;

int[] LeftArray = new int [l];
int[] RightArray = new int [r];

for (i=0; i

输出:

Sorted array 
23
23
23
34
45
65
67
89
90
101