其思想說白了就是先分後合,
先將需要排序的陣列迭代或遞迴每次分成兩份直到分成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 歸併排序的實現分為遞迴實現與非遞迴 迭代 實現。遞迴實現的歸併排序是演算法設計中分治策略的典型應用,我們將乙個大問題分割成小問題分別解決,然後用所有小問題的答案來解決整個大問題。非遞迴 迭代 實現的歸併排序首先進行是兩兩歸...