排序算法:归并排序
【摘要】 归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(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)