程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java排序算法總結之合並排序

Java排序算法總結之合並排序

編輯:關於JAVA

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、將另外一序列剩下的一切元素直接復制到歸並序列尾

代碼完成:

////////////////
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法式設計有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved