排序算法java实现归并排序

 

public class MergeSort {

//归并排序

//基本思想:归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法的一个非常典型的应用。

//首先考虑下如何将两个有序数列合并:

//比较两个数列的第一个数,谁小就先去谁,取了后就在对应数列中删除这个数,然后再进行比较,

//如果数列为空,那么将另一个数列的数据依次取出即可。

 

//解决了两个数列合并问题,再来看归并排序,基本思路就是:

//将数组分成A,B两组,如果这两组内的数据都是有序的,就可以很方便的将这两组数据进行排序。

//那么可以将A,B组各自再分成两组,依次类推,当分出来的小组只有一个数据时,可以认为这个小组组内已经达到了有序,

//然后再合并相邻的两个小组就可以了,这样通过先递归的分解数列,再合并数列就完成了归并排序你。

 

      //过程



 

//平均时间复杂度:O(nlogn)

//将数列分开成小数列为log(n),和并数列的过程为:O(n)

 

public static void main(String[] args) {

int[] arr = new int[]{6,2,4,1,9,3,6,7,0};

System.out.println("排序前=====");

print(arr);

System.out.println("");

System.out.println("排序后");

int[] temp = new int[arr.length];

mergeSort(arr,0,arr.length-1,temp);

print(arr);

}

 

public static void mergeSort(int[] arr,int first,int last,int[] temp) {

if(first < last){

int middle = (first + last) / 2;

mergeSort(arr,first,middle,temp);

mergeSort(arr,middle+1,last,temp);

mergeArray(arr,first,middle,last,temp);

}

 

}

 

//将两个数组合并

public static void mergeArray(int[] arr, int first,int middle,int last,int[] temp){

int i= first;

int j = middle + 1;

int k = 0;

while(i<=middle && j<=last){

if(arr[i]<=arr[j]){

temp[k] = arr[i];

k++;

i++;

}else{

temp[k] = arr[j];

k++;

j++;

}

}

while(i <= middle){

temp[k] = arr[i];

k++;

i++;

}

 

while(j<=last){

temp[k] = arr[j];

k++;

j++;

}

 

for(int x=0; x<k; x++){

arr[first+x] = temp[x];

}

}

 

public static void print(int[] arr){

for(int i=0; i<arr.length; i++){

System.out.print(arr[i]+",");

}

}

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值