【資料結構】歸併排序!!!
歸併排序
整體思想:將資料分成很多的部分,每次排序資料的一部分,然後將兩部分的資料進行整體排序,這樣一步一步將整體資料排序。
如圖:
注:將需要排序的資料進行分塊,當每個塊的資料足夠的少的時候就可以進行效率高的排序方法,當兩塊資料排序好的時候就可以將兩塊排序好的資料進行合併。
具體實現方法:
#ifndef _MERGESORT_H
#define _MERGESORT_H
#include<iostream>
using namespace std;
template<class T>
void merge(T* arr,size_t start,size_t end,T* tmp){
size_t left_length = (end - start +1)/2 + 1;
size_t mid = start + left_length;
size_t result_length = start;
size_t right = mid;
size_t left = start;
while(left < mid && right <= end){
if(arr[left] <= arr[right])
tmp[result_length++] = arr[left++];
else
tmp[result_length++] = arr[right++];
}
while(left < mid){
tmp[result_length++] = arr[left++];
}
while(right <= end){
tmp[result_length++] = arr[right++];
}
}
template<class T>
void _mergesort(T* arr,size_t start,size_t end,T* tmp){
if(NULL == arr)
return ;
size_t mid = (end-start+1)/2+start;
if(end - start == 1){
if(arr[start] > arr[end])
swap(arr[start],arr[end]);
return ;
}
else if(end - start == 0){
return ;
}
else{
_mergesort(arr,start,mid,tmp);
_mergesort(arr,mid+1,end,tmp);
merge(arr,start,end,tmp);
for(size_t i = start;i <= end;i++)
arr[i] = tmp[i];
}
}
template<class T>
void mergesort(T* arr,size_t size){
if(NULL == arr)
return;
T* tmp = new T[sizeof(T)*size];
_mergesort(arr,0,size,tmp);
delete[] tmp;
}
#endif
相關文章
- 資料結構:歸併排序(非遞迴)資料結構排序遞迴
- 【資料結構與演算法】歸併排序資料結構演算法排序
- 資料結構與演算法——排序演算法-歸併排序資料結構演算法排序
- (戀上資料結構筆記):歸併排序(Merge Sort)資料結構筆記排序
- 演算法與資料結構系列 ( 七 ) - 歸併排序- Merge Sort演算法資料結構排序
- 演算法與資料結構高階排序演算法之歸併排序演算法資料結構排序
- 【Java資料結構與演算法】第八章 快速排序、歸併排序和基數排序Java資料結構演算法排序
- 演算法:排序連結串列:歸併排序演算法排序
- 歸併排序排序
- 快速排序&&歸併排序排序
- 【資料結構與演算法】高階排序(希爾排序、歸併排序、快速排序)完整思路,並用程式碼封裝排序函式資料結構演算法排序封裝函式
- 淺談歸併排序:合併 K 個升序連結串列的歸併解法排序
- 四、歸併排序 && 快速排序排序
- java歸併排序Java排序
- [C++]歸併排序(連結串列描述)C++排序
- 資料結構與演算法——歸併排序: 陣列&連結串列&遞迴&非遞迴解法全家桶資料結構演算法排序陣列遞迴
- 從零開始學資料結構和演算法 (五) 分治法 (二分查詢、快速排序、歸併排序)資料結構演算法排序
- 資料結構與排序資料結構排序
- 排序演算法__歸併排序排序演算法
- 排序演算法:歸併排序排序演算法
- 排序演算法 - 歸併排序排序演算法
- 排序演算法(歸併排序)排序演算法
- 歸併排序--排序演算法排序演算法
- 歸併排序--二路排序排序
- 歸併排序和基數排序排序
- 利用遞迴實現連結串列的排序(歸併排序)遞迴排序
- 資料結構實驗之連結串列四:有序連結串列的歸併資料結構
- 歸併排序 js demo排序JS
- 排序演算法之 '歸併排序'排序演算法
- php實現 歸併排序,快速排序PHP排序
- php插入排序,快速排序,歸併排序,堆排序PHP排序
- 歸併排序 nO(lgn) 稽核中排序
- 歸併排序——C語言排序C語言
- go 實現歸併排序Go排序
- 歸併排序加例題排序
- 資料結構32:選擇排序資料結構排序
- 資料結構之計數排序資料結構排序
- 資料結構第10章 排序資料結構排序
- 資料結構(python) —— 【18排序: 桶排序】資料結構Python排序