Java实现排序算法——归并排序

来源:互联网 发布:广联达bim建模软件 编辑:程序博客网 时间:2024/06/13 10:15

归并排序算法

一个待排序的原始数据序列进行归并排序的基本思路是,首先将含有n个节点的待排序序列看作是有n个长度为1的有序表组成,将它们两两合并,得到长度为2的有序子列若干,然后在对这些子序列两两合并,得到长度为4的若干有序子列,重复上述过程,直到最后的子列长度为n,从而完成排序过程。

代码实现如下:

public class MergeSort {    public static void main(String[] args) {        int a[]={32,21,45,34,55,64,75};        sort(a,0,a.length-1);        for(int i=0;i<a.length;i++){            System.out.print(a[i]+" ");        }    }    private static void sort(int[] a, int left, int right) {        int mid=(left+right)/2;        if(left<right){            sort(a,left,mid);//左边部分排好序            sort(a,mid+1,right);//右边部分排好序            merge(a,left,mid,right);//将左右两部分合并        }    }    private static void merge(int[] a, int left, int mid, int right) {        int temp[]=new int[right-left+1];//用于暂时存放数据        int i=left;//左边部分游标位置        int j=mid+1;//右边部分游标位置        int k=0;        //依次比较左右两部分数据大小,将数据存入temp数组中        while(i<=mid&&j<=right){            if(a[i]<a[j]){                temp[k]=a[i];                k++;                i++;            }else{                temp[k]=a[j];                k++;                j++;            }        }        //将左侧剩余数据加入temp数组        while(i<=mid){            temp[k]=a[i];            k++;            i++;        }        //将右侧剩余数据加入temp数组        while(j<=right){            temp[k]=a[j];            k++;            j++;        }        //将新数组数据覆盖原数组数据        for(int r=0;r<temp.length;r++){            a[left+r]=temp[r];        }    }}
0 0
原创粉丝点击