zoukankan      html  css  js  c++  java
  • 归并排序

    归并排序的实现.时间复杂度是O(nlgn),空间复杂度是O(n) + O(lgn).

     1 #include <iostream>
     2 
     3 using namespace std;
     4 
     5 void merge_array(int *, int, int, int);
     6 void merge_sort(int *, int, int);
     7 
     8 int main(void)
     9 {
    10 
    11     int A[6] = {5,1,2,6,9,3};
    12     merge_sort(A, 0, 5);
    13 
    14     for (int i=0; i<6; ++i)
    15     {
    16         cout << A[i] << " ";
    17     }
    18 
    19     cout << endl;
    20     return 0;
    21 }
    22 
    23 void merge_sort(int A[], int p, int r)
    24 {
    25     if (p < r)
    26     {
    27         int mid = (p + r) / 2;
    28         merge_sort(A, p, mid);
    29         merge_sort(A, mid+1, r);
    30         merge_array(A, p, mid, r);
    31     }
    32 }
    33 
    34 void merge_array(int A[], int p, int mid, int r)
    35 {
    36     int *array1 = NULL;
    37     int *array2 = NULL;
    38     
    39     int array1_len = 0;
    40     int array2_len = 0;
    41     
    42     int i, j;
    43 
    44     array1_len = mid - p + 1;
    45     array2_len = r - mid;
    46 
    47     array1 = new int[array1_len];
    48     array2 = new int[array2_len];
    49     
    50     for (i=0; i<array1_len; ++i)
    51     {
    52         array1[i] = A[i+p];
    53     }
    54 
    55     for (j=0; j<array2_len; ++j)
    56     {
    57         array2[j] = A[mid+j+1];    
    58     }
    59 
    60     for (i=0, j=0; i<array1_len && j<array2_len;)
    61     {
    62         if (array1[i] < array2[j])
    63         {
    64             A[p++] = array1[i++];
    65         }
    66         else
    67         {
    68             A[p++] = array2[j++];
    69         }
    70     }
    71 
    72     while(i < array1_len)
    73     {
    74         A[p++] = array1[i++];
    75     }
    76 
    77     while(j < array2_len)
    78     {
    79         A[p++] = array2[j++];
    80     }
    81     
    82     delete [] array1;
    83     delete [] array2;
    84 }
  • 相关阅读:
    站立会议04(第二阶段)附加站立会议02、03
    第二阶段冲刺---站立会议01
    网络:Session原理及存储
    网络:Xen理解
    网络:LVS负载均衡原理
    网络:OSPF理解
    语音笔记:信号分析
    语音笔记:CTC
    语音笔记:矢量量化
    语音笔记:MFCC
  • 原文地址:https://www.cnblogs.com/yyxayz/p/4137439.html
Copyright © 2011-2022 走看看