Java源代码

 

public class Mergesort1 {

    public static void merge(int[]a,int low,int mid,int high){//对两组已经排序的数组进行合并
        int[]b=new int[high-low+1]; //临时数组,存储个数为high - low + 1个数据
        int s=low;
        int t=mid+1;
        int k=0;
        while(s<=mid&&t<=high){   //直至前半部或后半部数据完全录入暂存
            if(a[s]<=a[t])        //如果前半部的数据小于后半部的,前半部数据暂存
                b[k++]=a[s++];
            else                   //否则后半部数据暂存,并下标自加
                b[k++]=a[t++];
        }
        while(s<=mid)
            b[k++]=a[s++];
        while(t<=high)
            b[k++]=a[t++];
        for(int i=0;i<b.length;i++){     //将暂存的数据重新填充至array[low]--array[high]中
            a[low+i]=b[i];
        }
    }
    public static void mergesort(int a[],int low,int high){//对数组进行递归排序
        int mid;
        if(low<high){
            mid=(low+high)/2;
            mergesort(a,low,mid);
            mergesort(a,mid+1,high);
            merge(a,low,mid,high);
        }
    }
    public static void main(String[]args){
        int[]a={4,34,2,56,5,9,6,45,8,3};
        System.out.println("排序前数组为:");
        for(int i=0;i<a.length;i++){
            System.out.print(a[i]+" "); }
        mergesort(a,0,a.length-1);
        System.out.println("\n排序后数组为:");
        for(int i=0;i<a.length;i++){
            System.out.print(a[i]+" ");}    
    }

}

运行结果:

排序前数组为:
4 34 2 56 5 9 6 45 8 3
排序后数组为:
2 3 4 5 6 8 9 34 45 56

 

C++源代码:

#include <iostream>

using namespace std;

void Merge(int *array, int low, int middle, int high)  //合并
{
    int *A = new int[high - low + 1];  //临时数组,存储个数为high - low + 1个数据
    int i = low;
    int j = middle + 1;
    int k = 0;
    while(i <= middle && j <= high)  //直至前半部或后半部数据完全录入暂存
    {
        if(array[i] < array[j])  //如果前半部的数据小于后半部的,前半部数据暂存
            A[k++] = array[i++];
        else                     //否则后半部数据暂存,并下标自加
            A[k++] = array[j++];
    }

    while(i <= middle) //保证前半部数据录入暂存
        A[k++] = array[i++];
    while(j <= high)   //保证后半部数据录入暂存
        A[k++] = array[j++];
    for(i = low; i <= high; i++)  //将暂存的数据重新填充至array[low]--array[high]中
        array[i] = A[i - low];
}

void MergeSort(int *array, int low, int high)
{
    int middle;  //二分
    if(low < high)
    {
        middle = (low + high) / 2;  //二分
        MergeSort(array, low, middle); //前半部
        MergeSort(array, middle + 1, high);  //后半部
        Merge(array, low, middle, high);  //合并
    }
}

int main()
{
    cout<<"输入需要排列数据的个数:";

    int n;
    cin>>n;  //录入需要排列的个数
    int *array = new int[n];
    cout<<endl<<"请输入数据:"<<endl;

    for(int i = 0; i < n; i++)
    {
        cin>>array[i];  //录入未排序的数据
    }

    MergeSort(array, 0, n - 1);  //进行排序

    cout<<"排列后数据:"<<endl;
    for(int j = 0; j < n; j++)  //输出排列结果
    {
        cout<<array[j]<<" ";
    }
      cout<<endl;
    return 0;
}

运行结果:

 

posted on 2016-10-28 17:16  fengxiaolan  阅读(4046)  评论(0编辑  收藏  举报