当前位置:嗨网首页>书籍在线阅读

18-实战演练

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

3.3.5 实战演练

//program 3-2
#include <iostream>
#include <cstdlib>
#include <cstdio>
using namespace std; 
void Merge(int A[], int low, int mid, int high) 
{
     int *B = new int[high-low+1];     //申请一个辅助数组
     int i = low, j = mid+1, k = 0; 
     while(i <= mid && j <= high) 
{//按从小到大存放到辅助数组B[]中
         if(A[i] <= A[j]) 
               B[k++] = A[i++];
         else
               B[k++] = A[j++];
     }
     while(i <= mid) B[k++] = A[i++];  //将数组中剩下的元素复制到数组B中
     while(j <= high) B[k++] = A[j++];
     for(i = low, k = 0; i <= high; i ++)
           A[i] = B[k++];
}
void MergeSort(int A[], int low, int high) 
{
     if(low < high) 
{
           int mid = (low+high) /2;   //取中点
           MergeSort(A, low, mid);    //对A[low:mid]中的元素合并排序
           MergeSort(A, mid+1, high); //对A[mid+1:high]中的元素合并排序
           Merge(A, low, mid, high);  //合并
     }
}
int main()
{
     int n, A[100]; 
     cout<<"请输入数列中的元素个数n为:"<<endl; 
     cin>>n; 
     cout<<"请依次输入数列中的元素:"<<endl; 
     for(int i=0; i<n; i++)
          cin>>A[i]; 
     MergeSort(A,0,n-1); 
     cout<<"合并排序结果:"<<endl; 
     for(int i=0;i<n;i++)
          cout<<A[i]<<" ";
     cout<<endl; 
     return 0; 
}

算法实现和测试

(1)运行环境

Code::Blocks

(2)输入

请输入数列中的元素个数n为:
8
请依次输入数列中的元素:
42 15 20 6 8 38 50 12

(3)输出

合并排序结果:
6 8 12 15 20 38 42 50