排序算法:归并排序

举报
谙忆 发表于 2021/05/27 01:26:18 2021/05/27
【摘要】 归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 归并排序,其的基本思路就是将数组分成二组A,B,如果这二组组内的数据都是有序的,那么就可以很方便的将这二组数据进行排序。如何让这二组组内数据有序了? 可以将A,B组各自再分成二组。依次类推,当分出来的小组只有一个数据时,可以认为这个小组组...

归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。

归并排序,其的基本思路就是将数组分成二组A,B,如果这二组组内的数据都是有序的,那么就可以很方便的将这二组数据进行排序。如何让这二组组内数据有序了?
可以将A,B组各自再分成二组。依次类推,当分出来的小组只有一个数据时,可以认为这个小组组内已经达到了有序,然后再合并相邻的二个小组就可以了。这样通过先递归的分解数列,再合并数列就完成了归并排序。

利用递归和分而治之的技术将数据序列划分成为越来越小的半子表,再对半子表排序,最后再用递归步骤将排好序的半子表合并成为越来越大的有序序列,归并排序包括两个步骤,分别为:
1)划分子表
2)合并半子表

package cn.hncu;

import javax.swing.text.DefaultEditorKit.CopyAction;

public class MergeSort { public static void main(String[] args) { int a[]= new int[100]; for(int i=0;i<a.length;i++){ a[i]=(int)(Math.random()*(a.length)); //System.out.println(a[i]); } mergrSort(a,0,a.length-1); print(a); } private static void print(int[] a) { for(int i=0;i<a.length-1;i++){ System.out.print(a[i]+" "); } System.out.println(a[a.length-1]); } public  static void mergrSort(int a[],int left,int right){ if(left<right){ // 1、先分解 //把整个数组分解成:[left,mid]和[mid+1,right] int mid = (left+right)/2; mergrSort(a,left,mid); mergrSort(a,mid+1,right); //2、归并 int b[] = new int[a.length]; merge(a,b,left,mid,right); //把辅助序列b中的数据复制到数组a当中 copyArray(a,b,left,right); } } private static void merge(int[] a, int[] b, int left, int mid, int right) { int p = left;//游标遍历a[left,mid] int r = mid+1;//游标遍历a[mid+1,right] int k = left;//元素放入新数组的当前的位置(判断后) //游标遍历合并后的结果数组 while(p<=mid&&r<=right){ if(a[p]<a[r]){ b[k]=a[p++]; }else{ b[k]=a[r++]; } k++; } //把其中一个子序列当中剩余的元素直接照搬到归并结果数组当中 if(p>mid){ //左序列已完成合并,剩下的是右序列(照搬) for(int i=r;i<=right;i++){ b[k]=a[i]; k++; } }else{ for(int i=p;i<=mid;i++){ b[k++]=a[i]; } } } private static void copyArray(int[] a, int[] b, int left, int right) { for(int i=left;i<=right;i++){ a[i]=b[i]; } }

}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89

文章来源: chenhx.blog.csdn.net,作者:谙忆,版权归原作者所有,如需转载,请联系作者。

原文链接:chenhx.blog.csdn.net/article/details/50936938

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。