1. 程式人生 > >數據結構--遞歸實現歸並排序

數據結構--遞歸實現歸並排序

str pre while cme isp 數據 out bsp 復制

 1 /*通過遞歸實現歸並排序
 2  * 具有思路:將要排序的數組不斷劃分,直到只有一個元素的時候停止;
 3  * 這是遞歸的基準條件,返回進行排序。
 4  * 歸並排序的時間復雜度:O(NlogN):考慮的是復制數據到workarr和workarr到arr的次數
 5  * 
 6  * */
 7 public class MergeWithRecursion {
 8     static int items = 6;
 9     static int[] arr = {10,8,9,59,2,4};
10     public static void main(String[] args) {
11 display(); 12 mergeSort(); 13 display(); 14 15 } 16 17 public static void mergeSort(){ 18 int[] workarr = new int[items]; 19 recMergeSort(workarr,0,items-1); 20 } 21 22 private static void recMergeSort(int[] workarr, int low, int high) {
23 if(low == high){ 24 return; 25 } 26 else{ 27 int mid = (low + high) / 2; 28 recMergeSort(workarr,low,mid); 29 recMergeSort(workarr,mid+1,high); 30 merge(workarr,low,mid+1,high); 31 } 32 33 } 34 35
private static void merge(int[] workarr, int low, int mid, int high) { 36 //workarr index 37 int j = 0; 38 int lowbound = low; 39 int midindex = mid - 1; 40 int n = high - lowbound + 1; 41 //進行歸並到工作區數組 42 while(low <= midindex && mid <= high){ 43 if(arr[low] < arr[mid]){ 44 workarr[j++] = arr[low++]; 45 } 46 else{ 47 workarr[j++] = arr[mid++]; 48 } 49 } 50 51 while(low <= midindex){ 52 workarr[j++] = arr[low++]; 53 } 54 55 while(mid <= high){ 56 workarr[j++] = arr[mid++]; 57 } 58 59 //將工作區部分有序的數組復制到原來的數組 60 for(int i = 0; i < n;i++){ 61 arr[lowbound + i] = workarr[i]; 62 } 63 } 64 65 public static void display(){ 66 for(int i = 0; i < arr.length;i++){ 67 System.out.print(arr[i] + " "); 68 } 69 System.out.println(); 70 } 71 72 }

數據結構--遞歸實現歸並排序