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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

基础算法之归并排序

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

歸并排序也是一種常用的排序算法, 其時間復雜度為O(n*logn), 它的基礎是分治的思想。

其基本思路就是把數組分成兩組A,B, 如果這兩組內的數據都是有序的, 那么就可以很方便的對這兩組數據進行合并排序。

但是如何讓這兩組數據有序呢? 歸并法的思想就是把A,B兩組各自再分成兩組, 依次類推, 當分出來的小組數據只有一個的時候, 即可以認為小組數據已經達到了有序

然和合并相鄰的兩個小組就OK了~

歸并法的C語言實現如下:

1 //合并數組的前半部分和后半部分, 前提就是前后兩個子數組分別都已經排好序了 2 void mergeArray(int a[], int first, int mid, int last) { 3 4 int i, j, m, n; 5 i = first, m = mid; 6 j = mid+1, n = last; 7 int k = 0; 8 int temp[SIZE]; 9 10 while(i<=m && j<=n) { 11 if(a[i] < a[j]) { 12 temp[k++] = a[i++]; 13 } else { 14 temp[k++] = a[j++]; 15 } 16 } 17 18 while(i<=m) temp[k++] = a[i++]; 19 while(j<=n) temp[k++] = a[j++]; 20 21 for(i=0; i<k; i++) { 22 a[first+i] = temp[i]; 23 } 24 25 } 26 //歸并排序 27 void merge_sort(int a[], int start, int end) { 28 int mid = (start+end)/2; 29 if(start<end) { 30 merge_sort(a, start, mid); 31 merge_sort(a, mid+1, end); 32 mergeArray(a, start, mid, end); 33 } 34 }

一個簡單的測試用例,代碼如下:

#include<stdio.h>#define SIZE 10//合并數組的前半部分和后半部分, 前提就是前后兩個子數組分別都已經排好序了 void mergeArray(int a[], int first, int mid, int last) {int i, j, m, n;i = first, m = mid;j = mid+1, n = last;int k = 0;int temp[SIZE];while(i<=m && j<=n) {if(a[i] < a[j]) {temp[k++] = a[i++];} else {temp[k++] = a[j++];}}while(i<=m) temp[k++] = a[i++];while(j<=n) temp[k++] = a[j++];for(i=0; i<k; i++) {a[first+i] = temp[i];}} //歸并排序 void merge_sort(int a[], int start, int end) {int mid = (start+end)/2;if(start<end) {merge_sort(a, start, mid);merge_sort(a, mid+1, end);mergeArray(a, start, mid, end);} }int main() {int a[SIZE];int i;printf("Please input the num:\n");for(i=0; i<SIZE; i++){scanf("%d",&a[i]);}printf("before the sort:\n");for(i=0; i<SIZE; i++){printf("%d ", a[i]);}printf("\n");merge_sort(a, 0, SIZE-1);printf("after the sort:\n");for(i=0; i<SIZE; i++){printf("%d ", a[i]);}printf("\n"); } View Code

?

轉載于:https://www.cnblogs.com/beyond-Acm/p/4334145.html

總結

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

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