遞迴演算法的理解和使用
歸併演算法的理解和使用
隨機數的生成
歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法的乙個非常典型的應用。
如何將2個有序數列合併?答案很簡單,只要從比較2個數列的第乙個數,誰小就先取誰,取了後就在對應數列中刪除這個數。然後再進行比較,如果有數列為空,那直接將另乙個數列的資料依次取出即可。
那將陣列分成二組a,b,如果這二組組內的資料都是有序的,那麼就可以很方便的將這二組資料進行排序。如何讓這二組組內資料有序了?
可以將a,b組各自再分成二組。依次類推,當分出來的小組只有乙個資料時,可以認為這個小組組內已經達到了有序,然後再合併相鄰的二個小組就可以了。這樣通過先遞迴的分解數列,再合併數列就完成了歸併排序。
並排序的效率是比較高的,設數列長為n,將數列分開成小數列一共要logn步,每步都是乙個合併有序數列的過程,時間複雜度可以記為o(n),故一共為o(n*logn)。
實現為:#include
宣告為#include
#include
using
namespace
std;
int compar (const
void * a, const
void * b)
int gbpx(int a,int first,int last,int temp);
int hb(int a,int first,int middle,int end,int temp);
int main(int argc, char *argv)
,a[11]=,i;
for(i=1;i<=10;i++)
gbpx(a,1,10,temp);//將所需引數傳遞給歸併排序函式
for(i=0;i<10;i++)
return0;}
/*函式開始*/
int gbpx(int a,int first,int last,int temp)
}/*合併的函式開始*/
int hb(int a,int first,int middle,int end,int temp)
else
}
while(i<=m)
while(j<=m)
for(ii=0;ii十大程式設計演算法助程式設計師走上高手之路 | 菜鳥教程
排序演算法總結 | 菜鳥教程
對於各種排序歸併是種很好的的演算法了,但學習排序演算法只是為了鍛鍊思維,並不像高考是為了背下來日後使用,切記!
對於函式的宣告和使用要注意,在學習過程中就出現下面的錯誤,引起報錯[error]collect2: ld returned 1 exit status
int cfpx(int a);
}
歸併和sort排序簡單運用
今天學習了歸併排序和sort函式的簡單運用,感覺sort函式真的是無比的神奇,能加各種神奇的東西,然後進行一些排序練習 歸併排序基本 include using namespace std void merge int data,int start,int end,int result while ...
歸併排序演算法簡單實現
using system using system.collections.generic using system.linq using system.text namespace mergesort mergesort refarr,0,arr.length 1 foreach int item...
轉殖的簡單運用
package clonetest public class student implements cloneable public student public student string name,int age,string public string getname public void...