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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【大话数据结构算法】归并排序

發布時間:2024/4/14 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【大话数据结构算法】归并排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

歸并排序算法的基本步驟:

1、把0~length-1的數組分成左數組和右數組;
2、對左數組和右數組進行迭代排序;
3、將左數組和右數組進行合并,那么生成的整個數組就是有序的數據數組。


歸并排序基本算法實現如下:

void _merge_data_in_array(int[] array, int start,int middle,int end){int[] mergeArray = null;int left = start;int right = end;int m = middle;int mid = middle + 1;int k = 0;while(left <= m && mid <= right){if(array[left] < array[mid]){mergeArray[k++] = array[left++];} else{mergeArray[k++] = array[mid++];}}while(left <= m){mergeArray[k++] = array[left++];}while(mid <= right){mergeArray[k++] = array[mid++];}for(int i = 0;i < k;i++){array[start + i] = mergeArray[i];}}

java代碼實現如下:

public class Merge_Sort {public static void main(String[] args) {int[] array = {4,9,2,3,6,0,7,1,5};merge_sort(array,8);for (int i = 0; i < array.length; i++) {System. out.println(array[i]);}}//判斷參數合法性,調用合并函數進行迭代操作public static void merge_sort(int[] array, int length){if(null == array && 0 == length){return;}_merge_sort(array,0,length - 1);}//進行迭代操作public static void _merge_sort(int[] array, int start,int end){while(start < end){int middle = start + ((end -start) >> 1);//求middle,沒看懂 // int middle = (start + end) / 2;//對左數組進行迭代排序_merge_sort(array,start,middle);//對右數組進行迭代排序_merge_sort(array,middle + 1,end);//將迭代排序后的左數組和右數組進行合并_merge_data_in_array(array,start,middle,end);}}//對合并后的隊列進行合并操作public static void _merge_data_in_array(int[] array, int start,int middle,int end){int[] mergeArray = null;int left = start;int right = end;int m = middle;int mid = middle + 1;int k = 0;while(left <= m && mid <= right){if(array[left] < array[mid]){mergeArray[k++] = array[left++];} else{mergeArray[k++] = array[mid++];}}while(left <= m){mergeArray[k++] = array[left++];}while(mid <= right){mergeArray[k++] = array[mid++];}for(int i = 0;i < k;i++){array[start + i] = mergeArray[i];}}}

時間復雜度

歸并排序中可選區merge()函數內的“歸并排序”作為基本操作。merge()函數的作用是將兩個有序的序列歸并為一個整體有序的序列?!皻w并操作”即為將待歸并表中的元素復制到一個存儲歸并結果的表中的過程。在順序表中,merge()函數的“歸并操作”執行次數為要歸并的兩個子序列中元素個數之和。歸并排序的時間復雜度和初始序列無關,平均情況下為O(nlogn){以2為底},最好情況下為O(nlogn){以2為底},最壞情況下為O(nlogn){以2為底}。


空間復雜度

因為歸并排序需要轉存整個待排序列,因此空間復雜度為O(n)。

總結

以上是生活随笔為你收集整理的【大话数据结构算法】归并排序的全部內容,希望文章能夠幫你解決所遇到的問題。

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