歸併排序算法和快速排序算法時間複雜度都爲o(nlogn) ,且需要額外申請一個內存空間,用到的思想都是分治。 下邊是我的代碼可以拿去直接用。 public class MergeSort { public static void main(String[] args) { int arr[] = new int[]{1, 9, 2, 4, 88, 21, 15, 33, 16, 22, 51, 53, 99};//15 new MergeSort().merge_sort(arr); System.out.println(""); } public void merge_sort(int[] arr) { quick_sort_c(arr, 0, arr.length - 1); } private void quick_sort_c(int[] arr, int first, int end) { if (first >= end) return; int m = (first + end) / 2; quick_sort_c(arr, first, m); quick_sort_c(arr, m + 1, end); merge(arr, first, end, m); } private void merge(int arr[], final int s, final int e, final int m) { //把數組arr由 s-e 劃分成兩個區域 s-m m+1-e int temp[] = new int[(e - s)+1];//申請一個和arr原數組一樣的新數組 int i = s, j = m + 1; int k; for (k = 0; i <= m && j <= e; k++) { if (arr[i] <= arr[j]) { temp[k] = arr[i++]; } else { temp[k] = arr[j++]; } } //判斷一下哪一個區域有剩餘,並將剩餘的部分依次放入temp int sn = 0, se = -1; if (i <= m) { sn = i; se = m; } else if (j <= e) { sn = j; se = e; } for (; sn <= se; sn++) { temp[k++] = arr[sn]; } //把temp合併好的有序數組依次放到原數組種 for (int t = 0; t< temp.length; t++) { arr[s + t] = temp[t]; } }
歸併排序算法(適合大量數據)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.