歸併排序 外部排序

2021-08-28 18:58:30 字數 1671 閱讀 1862

基本思想

先對資料進行均分------>左右兩半部分------->均分到左右部分已經有序------>歸併

歸併排序核心步驟:

分組

歸併

//外部排序

void mergesortnor(int* array, int size);

void print(int* array, int size);

#endif //__mergesort_h__

mergesort.c

#define _crt_secure_no_warnings 1

#include"mergesort.h"

void print(int* array, int size)

printf("\n");

}void mergedata(int* array, int left, int mid, int right, int* temp)

while (begin2 < end2)

temp[index++] = array[begin2++];

while (begin1 < end1)

temp[index++] = array[begin1++];

}void _mergesort(int* array, int left, int right, int* temp)

}void mergesort(int* array, int size)

_mergesort(array, 0, size, temp);

free(temp);

}void mergesortnor(int* array, int size)

gap = gap * 2;

} free(temp);

temp = null;

}

test.c

#define _crt_secure_no_warnings 1

#include"mergesort.h"

int main()

; int size = sizeof(array) / sizeof(array[0]);

//mergesort(array, size);

mergesortnor(array, size);

print(array, size);

return 0;

}

外部排序 歸併排序

歸併排序 歸併排序是採用分治的思想,將陣列劃分為兩個子陣列,然後遞迴的將每個子陣列再進行劃分,直到陣列中只剩一下乙個元素,然後開始排序合併,直到將所有的子陣列合併完成,整個資料就是有序的了。歸併排序乙個重要的操作函式就是合併函式 時間複雜度 將陣列分成的子陣列 用二叉樹表示,假設共有n層,第k層共有...

關於多路歸併排序 外部排序

比如檔案內有1億資料排序。程式設計珠璣第乙個case是有關乙個技巧性解決外部排序問題的。問題很巧妙的解決了,但一開始提到的利用歸併排序進行外部排序的演算法仍值得仔細 一下,畢竟本科時學的不是很深入。先來看內部排序中最簡單的2路歸併排序演算法。演算法核心操作是將一維陣列中前後相鄰的兩個有序序列歸併為乙...

排序 歸併排序

歸併 merge 排序法是將兩個 或兩個以上 有序表合併成乙個新的有序表,即把待排序序列分為若干個子串行,每個子串行是有序的。然後再把有序子串行合併為整體有序序列。歸併 將兩個已經排好序的集合合併到乙個集合眾,並且保證新的集合也是有序的。核心點 只有乙個元素的集合是已經排好序的集合。歸併排序是建立在...