激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - Java排序算法總結之歸并排序

Java排序算法總結之歸并排序

2019-12-18 16:49一羽清寧 JAVA教程

這篇文章主要介紹了Java排序算法總結之歸并排序,較為詳細的分析了歸并排序的原理與java實現技巧,需要的朋友可以參考下

本文實例講述了Java排序算法總結之歸并排序。分享給大家供大家參考。具體分析如下:

歸并操作(merge),也叫歸并算法,指的是將兩個已經排序的序列合并成一個序列的操作。和快速排序類似,讓我們一起來看,歸并在Java中的實現。

歸并排序(Merge)是將兩個(或兩個以上)有序表合并成一個新的有序表,即把待排序序列分為若干個子序列,每個子序列是有序的。然后再把有序子序列合并為整體有序序列。

歸并排序是建立在歸并操作上的一種有效的排序算法。該算法是采用分治法(Divide and Conquer)的一個非常典型的應用。 將已有序的子序列合并,得到完全有序的序列;即先使每個子序列有序,再使子序列段間有序。若將兩個有序表合并成一個有序表,稱為2-路歸并。

歸并排序算法穩定,數組需要O(n)的額外空間,鏈表需要O(log(n))的額外空間,時間復雜度為O(nlog(n)),算法不是自適應的,不需要對數據的隨機讀取。

工作原理:

1、申請空間,使其大小為兩個已經排序序列之和,該空間用來存放合并后的序列
2、設定兩個指針,最初位置分別為兩個已經排序序列的起始位置
3、比較兩個指針所指向的元素,選擇相對小的元素放入到合并空間,并移動指針到下一位置
4、重復步驟3直到某一指針達到序列尾
5、將另一序列剩下的所有元素直接復制到合并序列尾

代碼實現:

?
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
////////////////
public void mergeSort(){
 long[] workSpace = new long[nElems];
 recMergeSort(workSpace,0,nElems-1);
}
private void recMergeSort(long[] workSpace,int lowerBound,int upperBound){
 if(lowerBound == upperBound){
  return;
 }
 else{
  int mid=(lowerBound+upperBound)/2;
  recMergeSort(workSpace, lowerBound, mid);
  recMergeSort(workSpace, mid+1, upperBound);
  merge(workSpace, lowerBound, mid+1, upperBound);
 }
}
private void merge(long[] workSpace,int lowPtr,int highPtr,int upperBound){
 int j = 0;
 int lowerBound = lowPtr;
 int mid = highPtr - 1;
 int n = upperBound-lowerBound+1;
 while(lowPtr<=mid&&highPtr<=upperBound){
  if(theArray[lowPtr]<theArray[highPtr]){
  workSpace[j++]=theArray[lowPtr++];
  }
  else{
  workSpace[j++]=theArray[highPtr++];
  }
 }
 while(lowPtr<=mid){
  workSpace[j++] = theArray[lowPtr++];
 }
 while(highPtr<=upperBound){
  workSpace[j++] = theArray[highPtr++];
 }
 for(j=0;j<n;j++){
  theArray[lowerBound+j]=workSpace[j];
 }
}

歸并排序是比較穩定的排序.即相等的元素的順序不會改變.如輸入記錄 1(1) 3(2) 2(3) 2(4) 5(5) (括號中是記錄的關鍵字)時輸出的 1(1) 2(3) 2(4) 3(2) 5(5) 中的2 和 2 是按輸入的順序.這對要排序數據包含多個信息而要按其中的某一個信息排序,要求其它信息盡量按輸入的順序排列時很重要.這也是它比快速排序優勢的地方.

希望本文所述對大家的java程序設計有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美日韩在线播放一区 | 一级黄色片在线看 | 久草亚洲视频 | 成人久久免费 | 蜜桃精品视频 | freexxx69性欧美hd | 午夜爽爽爽男女免费观看hd | 亚洲免费网站 | 国产成人精品区一区二区不卡 | 毛片在线视频免费观看 | 亚洲av毛片久久久久 | 麻豆视频在线免费观看 | 成年片在线观看 | 午夜a狂野欧美一区二区 | 极品美女一级毛片 | 国产成人在线视频播放 | 看免费5xxaaa毛片 | 欧美一级特黄aaaaaa在线看首页 | 黄视频网站免费观看 | 国产亚洲精品久久午夜玫瑰园 | 日本综合久久 | 国产美女做爰免费视 | 国产精品久久久久久久久久三级 | 成人福利在线免费观看 | 毛片一级片 | 欧美毛片 | 91免费版在线| 99精品国产一区二区三区 | 99热1| 黄在线看 | 黄污视频在线看 | 91精品国产91久久久久久不卞 | 国产高潮好爽受不了了夜色 | 久久精品9 | 国产精品久久久久久影院8一贰佰 | 91网站免费在线观看 | 一级片九九 | 国产成人精品免费视频大全办公室 | 毛片免费试看 | 欧美在线日韩 | 欧美一级二级毛片视频 |