• 归并排序


    归并排序具有递归和非递归两种方式:

    递归的归并排序代码如下:

     1 #include <iostream>
     2 #include <list>
     3 #include <stack>
     4 using namespace std;
     5 //合并排序的前期判断,将不符合归并排序的数组进行筛除,
     6 //申请归并排序的辅助数组空间
     7 void MergeSort(int *p, int n)
     8 {
     9     void Msort(int *p, int *temp,int left, int right);
    10     if(n <= 0 || p == NULL)
    11         return;
    12     int *temp = new int[n];
    13     if(temp == NULL)
    14         return;
    15     Msort(p, temp, 0, n-1);
    16     delete [] temp;
    17 }
    18 //递归形式的合并排序
    19 void Msort(int *p, int *temp, int left, int right)
    20 {
    21     void Merge(int *, int *, int, int, int);
    22     if(left < right)
    23     {
    24         int leftend = (left + right) / 2;
    25         int rightbegin = leftend + 1;
    26         Msort(p, temp, left, leftend);
    27         Msort(p, temp, rightbegin, right);
    28         Merge(p, temp,left, rightbegin, right);
    29     }
    30 }
    31 //将数组中指定长度的两段,按照一定大小进行合并。
    32 void Merge(int *p, int *temp, int left, int rightbegin, int right)
    33 {
    34     int TempArray = rightbegin;
    35     int pos = left;
    36     int begin = left;
    37     while(left < TempArray && rightbegin <= right)
    38     {
    39         if(p[left] <= p[rightbegin])
    40             temp[pos++] = p[left++];
    41         else
    42             temp[pos++] = p[rightbegin++];
    43     }
    44     while(left < TempArray)
    45         temp[pos++] = p[left++];
    46     while(rightbegin <= right)
    47         temp[pos++] = p[rightbegin++];
    48     while(pos-- >= begin)
    49         p[pos] = temp[pos];
    50 }
    51 
    52 int main()
    53 {
    54     //测试
    55     int num = 9;
    56     int *p = new int[num];
    57     for(int i = 0; i < num; i++)
    58         p[i] = 10 - i;
    59     for(int i = 0; i < num; i++)
    60         cout << p[i] << endl;
    61     MergeSort(p,num);
    62     for(int i = 0; i < num; i++)
    63         cout << p[i] << endl;
    64     return 0;
    65 }
  • 相关阅读:
    Java 第二题
    第6次作业--static关键字、对象
    20194643 自动生成四则运算第一版报告
    软件工程 第一次作业
    MySQL主从复制与读写分离原理
    垂直拆分、读写分离、水平拆分(分库分表)详解
    MySQL InnoDB 索引原理
    MySQL架构体系&SQL查询执行全过程解析
    最全MySQL锁详解:表/行/页锁、共享/排它锁、悲观/乐观锁等
    MySQL事务ACID与隔离级别详解
  • 原文地址:https://www.cnblogs.com/wyqx/p/3059895.html
Copyright © 2020-2023  润新知