日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

算法八之归并排序

發(fā)布時間:2023/12/3 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法八之归并排序 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、歸并排序原理

歸并排序(MERGE-SORT)是建立在歸并操作上的一種有效的排序算法,該算法是采用分治法(Divide and Conquer)的一個非常典型的應(yīng)用。將已有序的子序列合并,得到完全有序的序列;即先使每個子序列有序,再使子序列段間有序。若將兩個有序表合并成一個有序表,稱為二路歸并。 歸并過程為:比較a[i]和b[j]的大小,若a[i]≤b[j],則將第一個有序表中的元素a[i]復制到r[k]中,并令i和k分別加上1;否則將第二個有序表中的元素b[j]復制到r[k]中,并令j和k分別加上1,如此循環(huán)下去,直到其中一個有序表取完,然后再將另一個有序表中剩余的元素復制到r中從下標k到下標t的單元。歸并排序的算法我們通常用遞歸實現(xiàn),先把待排序區(qū)間[s,t]以中點二分,接著把左邊子區(qū)間排序,再把右邊子區(qū)間排序,最后把左區(qū)間和右區(qū)間用一次歸并操作合并成有序的區(qū)間[s,t]。

二、算法實現(xiàn)

package cn.mk;import java.util.Arrays;/**** @author MK*/ public class MergeSort {public static void mergeSort(int[] data) {mergeSortCall(data, 0, data.length-1);}/*** 歸并遞歸* @param data 序列* @param low 開始* @param high 末尾*/private static void mergeSortCall(int[] data,int low,int high) {if(low<high){int mid=(low+high)/2;mergeSortCall(data,low,mid); //左邊遞歸mergeSortCall(data, mid+1, high);//右邊遞歸mergeUnit(data,low,mid,high); //合并}}/*** 合并* @param data 序列* @param low 起始* @param mid 中間* @param high 末尾*/private static void mergeUnit(int[] data, int low, int mid, int high) {int n1=mid-low+1;int n2=high-mid;int[] d1=new int[n1];int[] d2=new int[n2];System.arraycopy(data, low, d1, 0, n1);// data[low..mid]復制到d1System.arraycopy(data, mid+1, d2, 0, n2);//data[mid+1..high]復制到d2int i=0;int j=0;int k=low;//開始合并兩個序列while (i<n1&&j<n2) { if(d1[i]<d2[j]){data[k]=d1[i++];}else{data[k]=d2[j++];}k++;}//剩余的d1追加到后面while (i<n1) { data[k++]=d1[i++];}//剩余的d2追加到后面while (j<n2) { data[k++]=d2[j++];}}public static void main(String[] args) {int[] data={2,1,5,-2};mergeSort(data);System.out.println(Arrays.toString(data));} }

?

三、算法復雜度

最好時間O(nlogn),最壞時間O(nlogn),平均時間O(nlogn),算法穩(wěn)定,空間復雜度O(n)。n越大時候,算法效率越好。

?

總結(jié)

以上是生活随笔為你收集整理的算法八之归并排序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。