亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

手把手教你寫一個歸并排序

2019-11-10 18:08:09
字體:
來源:轉載
供稿:網友

歸并排序是一個很穩定的排序方法,它具有以下特點:  1.時間復雜度為θ(NlogN)(關于時間復雜度的符號表示可以查看《算法導論》第一部分第三/四章),穩定而且是比較排序模型中能達到的最快(當然就算換個很舒服的輸入也只能花同樣的時間) 2.它不是一個in place的排序算法。也就是說它的排序需要借助一個臨時數組來存放數據。

算法分析

歸并排序用的是分治法 眾所周知(強行眾所周知)分治法的三個步驟:拆分(母問題為子問題)-解決(子問題)-合并(子問題的解)。歸并排序的這三個步驟描述如下: 拆分:將數組拆為兩個子數組(盡量等分) 解決:將兩個子數組分別排序 合并:此處是歸并排序的重點部分,其思路是這樣的——首先創建一個足以容納下兩個數組的所有元素的數列用于儲存數據,然后對于兩個已經排好序的數列來說,比較其首元素,取小的一方填入新數列,隨后將新數列和剛處理的數列指針后移,然后如此往復,當某一個指針已經指向數組最后一個元素之后時,將另一個數組中的元素按順序填入新數組。 不難看出,如果兩子數列已經有序那么最后合并所得的數列一定是有序的。而當問題被遞歸式地拆分到底(bottom out)時,也就是只有一個元素之后,合并所做的只是將兩個元素按照大小順序填入一個新的只會有兩個元素的數組。

手把手教你寫代碼

這里就只說C啦,C++的也可以按著寫反正用到的還沒有那么多不同。 首先關于臨時數組我是這么想的:既然每次都會用到對應大小的數組,那么干脆就申請一個等大的數組用于排列,正好序號還能對得上。不過考慮到每次排序完成后是臨時數組變得有序,所以在排序之后還應有個復制的過程。 因為排序的時候有排序合并兩個操作,所以要有兩個函數。因為是自己用所以也不用關心越界/錯誤情況,所以返回值用void就好

#include <stdio.h>void mergesort(int *arr,int *tem,int begin,int end);void merge(int *arr,int *tem,int begin,int mid,int end);int main()//再次強調:你可以只寫main()但一定不要寫 void main()!{ int n,i; scanf("%d",&n); int arr[n],tem[n];//C99之后可以用變量作為容量申請數組了 mergesort(arr,tem,0,n-1); reutnr 0;}

主函數就完成了,現在我們開始考慮mergesort函數 傳入以后要判斷是不是已經到底了,如果到底我們是需要一個復制的過程,之后會需要遞歸排序,最后用合并函數。 于是mergesort函數寫成這樣:

void mergesort(int *arr,int *tem,int begin,int end){ if(begin<end){ int mid=(begin+end)>>1; mergesort(arr,tem,begin,mid); mergesort(arr,tem,mid+1,end); merge(arr,tem,begin,mid,end); }else{ tem[begin]=arr[begin]; }}

現在可以開始merge函數的編寫了,這也是我認為的歸并排序最難的地方,我理出來的思路是這樣的: 因為最后是有一個復制的過程的,所以指針在開始的時候是不能變的,那么就在開始申請變量賦值用于開始的排序就好。 int *p1=tem+first,*p2=tem+mid+1,*p3=arr+first; 對于是否滿足放入數組的條件我一開始寫成這樣:

if((p1<tem+mid+1)&&(*p1<*p2))

錯在哪里? 注意如果p2都已經到末尾了(越界),這個壞東西還是會判斷后面的垃圾數據是不是滿足條件,而我們又都知道C語言的邏輯是存在短路這個東西的,所以最后merge函數應該長這樣:

void merge(int *arr,int *tem,int first,int mid,int last){ int *p1=tem+first,*p2=tem+mid+1,*p3=arr+first; int i; for(i=0;i<last-first+1;i++){ if((p2>tem+last)||(p1<tem+mid+1)&&(*p1<*p2)){ *(p3++)=*(p1++); }else{ *(p3++)=*(p2++); } }while(first<=last){ *(tem+first)=*(arr+first);//可別忘復制這個操作 first++; }}如果感覺自己明白了,不妨動手試一試寫一個自己的歸并排序吧~
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美一级成年大片在线观看| 日韩有码片在线观看| 亚洲第一偷拍网| 精品无人区乱码1区2区3区在线| 欧美黄网免费在线观看| 欧美激情视频在线免费观看 欧美视频免费一| 日韩美女在线观看| 欧美国产亚洲精品久久久8v| 免费99精品国产自在在线| 国产精品久久久久久久久久新婚| 日本高清视频一区| 亚洲欧美日韩综合| 亚洲精品乱码久久久久久按摩观| 久久久久久久一区二区三区| 日韩在线视频线视频免费网站| 久久视频在线视频| 久久艳片www.17c.com| 精品视频久久久| 久久久99免费视频| 久久影院资源网| 国产一区二区三区在线免费观看| 久久久国产精品x99av| 成人性生交大片免费观看嘿嘿视频| 一本一道久久a久久精品逆3p| 日韩精品免费在线播放| 亚洲精品suv精品一区二区| 成人午夜两性视频| 午夜精品99久久免费| 色综合91久久精品中文字幕| 国产日韩av在线播放| 午夜伦理精品一区| 欧美视频在线观看免费网址| 98午夜经典影视| 中文字幕av一区二区| 欧美大奶子在线| 日本最新高清不卡中文字幕| 色无极影院亚洲| 欧美激情精品久久久| 亚洲一级一级97网| 亚洲精品成人免费| 亚洲国产精品一区二区久| 97精品久久久中文字幕免费| 日韩中文字幕精品视频| 日韩**中文字幕毛片| 精品视频9999| 国产一区二区免费| 伊人久久精品视频| 精品久久久久久中文字幕一区奶水| 亚洲成人动漫在线播放| 中文字幕国产日韩| 国产精品爱啪在线线免费观看| 亚洲一区二区三区毛片| 亚洲人成毛片在线播放| 日本19禁啪啪免费观看www| 中文字幕日韩综合av| 欧美日韩国产黄| 国产伦精品一区二区三区精品视频| 午夜精品国产精品大乳美女| 国产一区二区三区在线播放免费观看| 成人黄色免费网站在线观看| 成人av在线亚洲| 97在线视频精品| 91亚洲一区精品| 成人欧美在线视频| 亚洲精品成人免费| 欧美激情亚洲视频| 成人亲热视频网站| 日韩黄色高清视频| 日韩精品日韩在线观看| 国产精品美女久久久久av超清| 国产精品极品美女在线观看免费| 九色精品免费永久在线| 日韩av电影在线免费播放| 中文字幕亚洲欧美一区二区三区| 精品中文字幕久久久久久| 中文字幕综合一区| 亚洲乱亚洲乱妇无码| 日韩大陆毛片av| 色妞在线综合亚洲欧美| 欧美精品久久久久久久| 久久精品久久久久电影| 亚洲成人av中文字幕| 北条麻妃久久精品| 91精品国产高清自在线| 久久伊人精品天天| 欧美性69xxxx肥| 日日噜噜噜夜夜爽亚洲精品| 亚洲国产欧美在线成人app| 亚洲人成网站色ww在线| 精品久久久久久久久久| 91精品国产自产在线| 欧美在线视频免费| 亚洲成人a**站| 久久香蕉频线观| 国产精品日日摸夜夜添夜夜av| 成人免费在线网址| 欧美激情视频网| 久久久久女教师免费一区| 欧美日韩人人澡狠狠躁视频| 日韩欧美在线一区| 欧美人交a欧美精品| 亚洲美女www午夜| 亚洲国产小视频| 日韩av在线资源| 日韩在线观看网址| 欧美成人四级hd版| 久久久久久久网站| 国产精品久久99久久| 成人激情春色网| 成人激情视频免费在线| 青青在线视频一区二区三区| 亚洲一区中文字幕在线观看| 久热精品视频在线| 欧美一级淫片videoshd| 欧美成人精品xxx| 亚洲欧美日韩高清| 91精品国产亚洲| 亚洲欧美在线一区二区| 欧美性xxxx极品高清hd直播| 国产精品一香蕉国产线看观看| 97视频在线观看视频免费视频| 欧美性猛交xxxx黑人猛交| 人人澡人人澡人人看欧美| 亚洲性av网站| 日韩免费观看在线观看| 亚洲精品国产综合久久| 国产在线精品自拍| 国产亚洲精品va在线观看| 久久人人爽人人爽人人片亚洲| 免费97视频在线精品国自产拍| 欧美成人午夜激情在线| 国产精品人人做人人爽| 成人做爽爽免费视频| 国产精品久久99久久| 欧美激情2020午夜免费观看| 欧美日韩人人澡狠狠躁视频| 国产成人精品免高潮费视频| 亚洲深夜福利视频| 亚洲女人被黑人巨大进入| 国产日韩欧美视频在线| 欧美激情视频一区二区三区不卡| 98精品国产高清在线xxxx天堂| 亚洲精品欧美日韩专区| 欧美俄罗斯乱妇| 亚洲一区999| 欧美日韩另类在线| 国产亚洲精品美女| 久久香蕉国产线看观看网| 成人午夜激情网| 亚洲天堂av高清| 亚洲a在线播放| 国产欧美日韩中文字幕在线| 中文精品99久久国产香蕉| 永久免费精品影视网站| 98精品在线视频| 午夜精品久久久久久久99黑人| 国产精品久久久久久久久久小说| 欧美裸体xxxx极品少妇| 欧美精品免费在线| 国内精品一区二区三区| 欧美另类交人妖| 国产日韩一区在线| 欧美日韩在线影院| 欧美激情一区二区三区高清视频|