基礎概念
百度百科是這么描述歸并排序的:
歸并操作(merge),也叫歸并算法,指的是將兩個已經排序的序列合并成一個序列的操作。
設有數列
{6,202,100,301,38,8,1}
初始狀態:
[6] [202] [100] [301] [38] [8] [1]
比較次數
i=1 [6 202 ] [ 100 301] [ 8 38] [ 1 ] 3 i=2 [ 6 100 202 301 ] [ 1 8 38 ] 4 i=3 [ 1 6 8 38 100 202 301 ] 4
總計: 11次
實例
#include <stdio.h> void printArr(int arr[],int length){ int i; for(i=0;i<length;i++){ printf("%d,",arr[i]); } printf("/n"); } void merge(int a[],int alength,int b[],int blength,int c[]){//將2個已排好序的數組合并到數組c int i=0,j=0,k=0; while(1){ if(a[i]<=b[j]){ c[k] = a[i]; i++; k++; if(i==alength){ for(;j<blength;j++,k++){ c[k] = b[j]; } break; } }else{ c[k] = b[j]; j++; k++; if(j==blength){ for(;i<alength;i++,k++){ c[k] = a[i]; } break; } } } printArr(c,k); } void mergeSort(int arr[],int length){//將一個數組分成2個數組,前length-1為第一個,最后一個為第二個,然后合并2個數組 if(length > 1){ int arr1[length-1],arr2[1] = {arr[length-1]}; int i; for(i=0;i<length-1;i++){ arr1[i] = arr[i]; } mergeSort(arr1,length-1);//遞歸的調用自己 merge(arr1,length-1,arr2,1,arr); } } int main(void){ int a[10] = {3,54,16,8,123,8,89,23,87,2}; printArr(a,10); mergeSort(a,10); return 0; }
算法性能/復雜度
歸并排序的效率是很高的,由于遞歸劃分為子序列只需要logN復雜度,而合并每兩個子序列需要大約2n次賦值,為O(n)復雜度,因此,只需要簡單相乘即可得到歸并排序的時間復雜度 O(
主站蜘蛛池模板:
天天成人综合网
|
欧美精品一区二区三区在线播放
|
成人久久久精品国产乱码一区二区
|
在线免费看黄色
|
欧美videosex性欧美黑吊
|
蜜桃日韩
|
国产精品久久嫩一区二区 免费
|
91精品久久久久
|
国产成人精品一区二区仙踪林
|
国产精品一区在线
|
99热精品在线
|
国产一区二区在线视频观看
|
日韩高清一区二区
|
色噜噜视频
|
国产剧情一区二区
|
国产成人片|
青草精品
|
免费a级作爱片免费观看欧洲
|
欧美久久大片
|
蜜桃久久
|
亚洲一区视频
|
国产成人久久精品一区二区三区
|
九九热最新视频
|
日韩亚洲视频在线观看
|
欧美福利影院
|
99在线精品视频
|
成人在线精品视频
|
av网址在线播放
|
亚洲精品自拍视频
|
国外成人在线视频网站
|
黄色在线观看网站
|
青青草免费在线视频
|
国产精品久久久一区二区
|
亚洲欧美日韩另类精品一区二区三区
|
成人在线免费观看
|
日韩欧美视频
|
国产精品久久二区
|
龙珠z普通话国语版在线观看
|
亚洲免费一级片
|
黄色片毛片
|
色婷婷一区二区三区四区
|