合并排序

合并排序的思路是:把数组分成两部分,分别进行排序,再把排好序的两部分合并成排序数组。合并排序对一个n个元素的数组排序所需时间是O(nlogn)。用合并排序排序{9, 4, 5, 2, 1, 7, 4, 6}过程如下:

合并排序和快速排序执行时间比较

算法C++实现:

 1 //对n个数进行合并排序
 2 void Merge(int A[], int low, int mid, int high)
 3 {
 4     int B[];//辅助数组
 5     int s = low , t = mid + 1 , k = low;
 6 
 7     //将小元素添加到辅助数组
 8     while( s<=mid && t<=high )
 9     {
10         if(A[s]<=A[t])
11         {
12             B[k] = A[s];
13             s = s + 1;
14         }
15         else
16         {
17             B[k] = A[t];
18             t = t + 1;
19         }
20         k = k + 1;
21     }
22 
23     if(s == mid + 1)
24     {
25         //把A[t...high]中剩余的元素复制到B数组
26         for(int i = k ; i <= high ; i++)
27             B[i] = A[t++];
28     }
29     else
30     {
31         //把A[s...mid]中剩余的元素复制到B数组
32         for(int i = k ; i <= high ; i++)
33             B[i] = A[s++];
34     }
35 
36     //把B数组复制到A数组
37     for(int j = low ; j <= high ; j++)
38         A[j] = B[j];
39 }
40 
41 void mergesort(int A[] , int low ,int high)
42 {
43     if(low < high)
44     {
45         //把数组分成两部分分别排序在合并
46         int mid = (low+high)/2;
47         mergesort(A , low , mid);
48         mergesort(A , mid+1 , high);
49         Merge(A , low , mid , high);
50     }
51 }
MergeSort

相关文章:

  • 2021-06-11
  • 2022-12-23
  • 2021-05-03
  • 2022-12-23
  • 2021-11-20
  • 2022-12-23
  • 2021-12-19
猜你喜欢
  • 2022-12-23
  • 2021-04-24
  • 2022-12-23
  • 2021-11-20
  • 2022-12-23
  • 2021-06-03
  • 2021-06-08
相关资源
相似解决方案