【大话数据结构算法】归并排序
生活随笔
收集整理的這篇文章主要介紹了
【大话数据结构算法】归并排序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
歸并排序算法的基本步驟:
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)。
總結
以上是生活随笔為你收集整理的【大话数据结构算法】归并排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【大话数据结构算法】直接选择排序
- 下一篇: 【大话数据结构算法】哈夫曼树