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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

二分归并排序

發布時間:2023/12/9 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二分归并排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

二分歸并排序

歸并排序建立在歸并操作上的一種有效的排序算法,該算法是采用分治法的一個非常典型的應用。
將已有序的子序列合并,得到完全有序的序列;即先使每個子序列有序,再使子序列段間有序。若將兩個有序表合并成一個有序表,稱為二路歸并。
將兩個有序序列,合并成一個新的有序序列,分別取兩個有序序列的最小值,將兩個最小值比較,取最小

最壞情況下時間復雜度:O(nlogn)
平均情況下時間復雜度:O(nlogn)

java實現

package com.cn;import java.util.Arrays;public class TwoDivisionSort {public static void main(String[] args) {int[] a = {45,36,18,53,72,30,48,93,15,36};TwoDivisionSort td = new TwoDivisionSort();td.Sort(a, 0, a.length-1);System.out.println(Arrays.toString(a));}//二分排序public void Sort(int[] a,int start,int end){if(start < end){int mid = (start + end)/2;//左Sort(a,start,mid);//右Sort(a,mid+1,end);//左右歸并成一個新的有序序列Merge(a,start,mid,end);}}//將兩個有序序列合并成一個有序序列public void Merge(int[] a,int start,int mid,int end){int[] num = new int[end-start+1];//用于存放新排好序的序列int s1 = start;//第一個序列的起始下標int s2 = mid + 1;//第二個序列的起始下標int i = 0;//num[]數組的起始下標//通過比較將較小元素先放入num數組while(s1 <= mid && s2 <= end){if(a[s1] < a[s2]){num[i] = a[s1];++i;++s1;}else{num[i] = a[s2];++i;++s2;}}//將第一個序列的剩余元素放入num[]while(s1 <= mid){num[i] = a[s1];++i;++s1;}//將第二個序列的剩余元素放入num[]while(s2 <= end){num[i] = a[s2];++i;++s2;}//將num[]中的元素復制到數組afor(int j = 0;j < num.length;j++){a[j+start] = num[j];}}}

總結

以上是生活随笔為你收集整理的二分归并排序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。