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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

二路归并排序

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

遞歸實現

時間復雜度:O(nlgn) 空間復雜度:O(1)

http://m.blog.csdn.net/allen_fan_11/article/details/9097019

思路總結: (1)先遞歸分割 (2)再合并(把兩個有序數組進行排序合并)#include<stdio.h> void merge(int arr[], int l, int mid, int r) //合并 {int i = l;int j = mid + 1;int *t = new int[r - l + 1]; //開辟一個輔助數組tint k = 0;while (i <= mid && j <= r) //依次比較,取小值存入t[k]{if (arr[i] < arr[j]){t[k++] = arr[i++];}elset[k++] = arr[j++];}while (i <= mid) //當其中一個數組遍歷完成,把剩下的全部接過去{t[k++] = arr[i++];}while (j <= r){t[k++] = arr[j++];}for (k = l,i = 0; i < r - l + 1; i++) //把整個t數組拷貝給arr{arr[k] = t[i];k++;} }void MergeSort(int arr[], int l, int r) //遞歸分割 {if (l < r){int q = (l + r) / 2;MergeSort(arr, l, q);MergeSort(arr, q + 1, r);merge(arr, l, q, r);}}int main() {int arr[] = { 71, 61, 42, 8, 9, 3, 2 };//數組長度 = 數組元素的總個數int length = sizeof(arr) / sizeof(arr[0]);//傳入的l,r是數組的下標值,因此是0和length-1MergeSort(arr, 0, length - 1);for (int i = 0; i < length; i++)printf("%5d", arr[i]);printf("\n"); }

總結

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

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