資料結構之排序(二) 歸併排序

2021-08-20 16:48:48 字數 1273 閱讀 4990

其思想說白了就是先分後合,

先將需要排序的陣列迭代或遞迴每次分成兩份直到分成n個數為止,然後再將n個數涼兩兩排序後合併成n/2個陣列,以此類推直到合併排序成乙個陣列。

1、**中採用的是線性表的順序儲存結構來存放資料的:

typedef void list_node;     //用於復用加入元素

typedef unsigned long seqlist_node; //為了重複使用,所以在這裡使用的位址來操作的, 這裡要用unsigned long型別,unsingesd int型別是在32位系統下使用的

typedef struct //儲存線性表的結構體

tseqlist;

tseqlist* list_create(int maxsize) //建立線性表

if(list != null)

return list;

}

2、基於上面**實現歸併排序:

在**中merge函式是用來將乙個陣列的前半部分(已經有序)和它的後半部分(已經有序)排序成乙個有序的陣列,其中temp陣列是過渡陣列。

#include #include using namespace std;

void merge(int arr,int temp,int left,int mid,int right)else

}while(i<=mid)

while(j<=right)

t = 0;

//將temp中的元素全部拷貝到原陣列中

while(left <= right)

}void mergsort(int arr, int temp, int start, int end) //1.先將分成兩份,排序並合併

}void sortmerging( int arr ,int arr1, int length)

void main()

; int sr1[9];

//merg(sr,sr1,0,4,8);

int i = 0;

for(; i<9;i++)

printf("\n\n\n");

sortmerging(sr,sr1,9);

for(i = 0; i<9;i++)

printf("\n");

system("pause");

}

資料結構之排序 歸併排序

四 歸併排序 歸併 把若干個有序的數列,合成乙個有序的數列 如二路歸併 void merge int d1,int len1,int d2,int len2,int tmp while i len1 tmp k d1 i while j len2 tmp k d2 j 1,二路歸併排序 迭代法 把待...

資料結構 排序之歸併排序

歸併,即 遞迴合併 q 我們排序的目的是什麼?a 讓無序的序列變得有序。比如說,下面有乙個序列 排序前排序後 7654321 1234567 如果我們將這個序列從中間附近分開,分成兩個子串行,想辦法讓這兩個子串行變得有序。然後再把兩個有序的子串行合併成乙個有序的子串行,那麼我們的排序不就完成了嗎?如...

資料結構之歸併排序

介紹 歸併排序是建立在歸併操作上的一種有效的排序演算法,效率為o nlogn 歸併排序的實現分為遞迴實現與非遞迴 迭代 實現。遞迴實現的歸併排序是演算法設計中分治策略的典型應用,我們將乙個大問題分割成小問題分別解決,然後用所有小問題的答案來解決整個大問題。非遞迴 迭代 實現的歸併排序首先進行是兩兩歸...