A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

(1)基本排序:归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。
  1. import java.util.Arrays;

  2. publicclass mergingSort {

  3. inta[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51};

  4. publicmergingSort(){
  5.     sort(a,0,a.length-1);
  6.     for(int i=0;i<a.length;i++)
  7.        System.out.println(a[i]);
  8. }

  9. publicvoid sort(int[] data, int left, int right) {
  10.     // TODO Auto-generatedmethod stub
  11.     if(left<right){
  12.         //找出中间索引
  13.         int center=(left+right)/2;
  14.         //对左边数组进行递归
  15.         sort(data,left,center);
  16.         //对右边数组进行递归
  17.         sort(data,center+1,right);
  18.         //合并
  19.         merge(data,left,center,right);      
  20.     }

  21. }

  22. publicvoid merge(int[] data, int left, int center, int right) {
  23.     // TODO Auto-generatedmethod stub
  24.     int [] tmpArr=newint[data.length];
  25.     int mid=center+1;
  26.     //third记录中间数组的索引
  27.     int third=left;
  28.     int tmp=left;
  29.     while(left<=center&&mid<=right){
  30.         //从两个数组中取出最小的放入中间数组
  31.         if(data[left]<=data[mid]){
  32.             tmpArr[third++]=data[left++];
  33.         }else{
  34.             tmpArr[third++]=data[mid++];
  35.         }

  36.     }

  37.     //剩余部分依次放入中间数组
  38.     while(mid<=right){
  39.         tmpArr[third++]=data[mid++];
  40.     }

  41.     while(left<=center){
  42.         tmpArr[third++]=data[left++];
  43.     }

  44.     //将中间数组中的内容复制回原数组
  45.     while(tmp<=right){
  46.         data[tmp]=tmpArr[tmp++];
  47.     }
  48.     System.out.println(Arrays.toString(data));
  49. }
  50. }
复制代码



1347009541_6721.jpg (46.63 KB, 下载次数: 0)

1347009541_6721.jpg

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马