zoukankan      html  css  js  c++  java
  • MergeSort

     1 #include<iostream>
     2 using namespace std;
     3 
     4 #define N 100
     5 
     6 int g_array[N];    //存放输入的数字
     7 static int count;    //存放元素的个数
     8 
     9 //初始化函数
    10 void Initial()
    11 {
    12     cout << "请输入元素的个数:";
    13     cin >> count;
    14     cout << "请输入" << count << "个元素:";
    15     for(int i = 0; i < count; i++)
    16     {
    17         cin >> g_array[i];
    18     } 
    19 } 
    20 
    21 //合并函数
    22 void Merge(int a[], int l, int m, int r)
    23 {
    24     int i = l, j = m+1, k = l;
    25     int b[N];
    26     while(i <= m && j <= r)
    27     {
    28         if(a[i] <= a[j])
    29         {
    30             b[k++] = a[i++];
    31         }
    32         else
    33         {
    34             b[k++] = a[j++];
    35         }
    36     } 
    37     
    38     if(i > m)
    39     {
    40         for(int p = j; p <= r; p++)
    41         {
    42             b[k++] = a[p];
    43         }
    44     }
    45     else
    46     {
    47         for(int p = i; p <= m; p++)
    48         {
    49             b[k++] = a[p];
    50         }
    51     }
    52     
    53     //把b[]中排好的元素copy到a[]中
    54     for(int q = l; q <= r; q++)
    55     {
    56         a[q] = b[q];
    57     }      
    58 } 
    59 
    60 //并归排序 递归算法表示
    61 void MergeSort(int a[], int left, int right)
    62 {
    63     if(left < right)    //数组中至少有两个元素 
    64     {
    65         int i = (right + left)/2;
    66         MergeSort(a, left, i);
    67         MergeSort(a, i+1, right);
    68         Merge(a, left, i, right);//把left到right的元素排好序 
    69     }
    70 } 
    71 
    72 //打印排好序的数组
    73 void Print()
    74 {
    75     cout << "经过MergeSort后:";
    76     for(int i = 0; i < count; i++)
    77     {
    78         cout << g_array[i] << " "; 
    79     } 
    80     cout << endl;
    81 } 
    82 
    83 int main()
    84 {
    85     Initial();
    86     if(count > 1)
    87     {
    88         MergeSort(g_array, 0, count-1);
    89         Print();
    90     }
    91     else if(count == 1)
    92     {
    93         Print();
    94     }
    95     system("pause");
    96     return 0;
    97 }
    View Code
    永远渴望,大智若愚(stay hungry, stay foolish)
  • 相关阅读:
    Linxu下段错误(segmentation fault)的调试
    n900破解无线路由密钥(wep)
    windows 7 下安装运行VC6
    【转载】W32Dasm反汇编工具使用详解
    用PreCode Snippet代码高亮
    转——别告诉我能懂PPT
    程序员必须掌握的基本正则表达式
    简单之美—软件开发实践者的思考—故事场景1
    xml解析
    Android Frameworktouch事件派发过程深入理解
  • 原文地址:https://www.cnblogs.com/h-hkai/p/7822200.html
Copyright © 2011-2022 走看看