归并排序 Java实现 简单易懂
生活随笔
收集整理的這篇文章主要介紹了
归并排序 Java实现 简单易懂
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
歸并排序
歸并排序采用的是分治(divide-and-conquer)法思想。
1.基本思想:
將待排序元素分成大小大致相同的2個子集合,分別對2個子集合進行排序,最終將排好序的子集合合并成為所要求的排好序的集合。
2.執行過程:
3.時間復雜度
對長度為n的文件,需進行趟二路歸并,每趟歸并的時間為O(n),故其時間復雜度無論是在最好情況下還是在最壞情況下均是O(nlgn)。
4.空間復雜度
需要一個輔助向量來暫存兩有序子文件歸并的結果,故其輔助空間復雜度為O(n),顯然它不是就地排序。
5.代碼:
package sort;public class MergeSort {public static void merSort(int[] arr,int left,int right){if(left < right){int mid = (left+right)/2;merSort(arr,left,mid);//左邊歸并排序merSort(arr,mid+1,right);//右邊歸并排序merge(arr,left,mid,right);//合并兩個子序列}}private static void merge(int[] arr,int left,int mid,int right){int[] temp = new int[right - left + 1];//申請一個新的數組用來存儲int i = left;int j = mid + 1;int k = 0;while(i <= mid && j <= right){if(arr[i] < arr[j]){temp[k++] = arr[i++];}else{temp[k++] = arr[j++];}}while(i <= mid){temp[k++] = arr[i++];//左邊剩余填充進temp中}while(j <= right){temp[k++] = arr[j++];//右邊剩余填充進temp中}//將temp中的元素全部拷貝到原數組中for(int k2 = left;k2 < temp.length;k2++){arr[k2] = temp[k2];}}public static void main(String[] args) {int[] test = {9,2,6,3,5,7,10,11,12};merSort(test,0,test.length-1);for(int i = 0;i < test.length;i++){System.out.print(test[i] + " ");}} }一定要注意:
while(i <= mid){temp[k++] = arr[i++];//左邊剩余填充進temp中}while(j <= right){temp[k++] = arr[j++];//右邊剩余填充進temp中}是小于等于
6.穩定性
歸并排序是一種穩定的排序
總結
以上是生活随笔為你收集整理的归并排序 Java实现 简单易懂的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据可视化----我在寻找一款类似vfp
- 下一篇: Java 迭代实现归并排序