原文: 參考狄泰軟體相關教程
歸併示意圖:
程式入下:
#ifndef sort_h
#define sort_h
#include "object.h"
namespace dtlib
template < typename t >
static void merge(t src, t helper, int begin, int mid, int end, bool min2max=true)
else
}while( i <= mid)
while( j <= end )
for(i = begin; i <= end; i++)
}template < typename t >
static void merge(t src, t helper, int begin, int end, bool min2max=true)
}public:
template < typename t >
static void select(t array, int len, bool min2max=true)
}if( min != i)}}
template < typename t >
static void insert(t array, int len, bool min2max=true)
if( k != i ) //賦值比「比較操作耗時」}}
template < typename t >
static void bubble(t array, int len, bool min2max=true)}}
}template < typename t >
static void shell(t array, int len, bool min2max=true)
if( k != i ) //賦值比「比較操作耗時」
}}while( d > 1 );
}template < typename t >
static void merge(t array, int len, bool min2max=true)
delete helper;
}};}
#endif // sort_h
注意:歸併排序是一種穩定的排序演算法
**如下:
#ifndef sort_h
#define sort_h
#include "object.h"
namespace dtlib
template < typename t >
static void merge(t src, t helper, int begin, int mid, int end, bool min2max=true)
else
}while( i <= mid)
while( j <= end )
for(i = begin; i <= end; i++)
}template < typename t >
static void merge(t src, t helper, int begin, int end, bool min2max)
}template < typename t >
static int partition(t array, int begin, int end, bool min2max)
swap(array[begin], array[end]);
while( (begin < end) && (min2max ? (array[begin] <= pv) : (array[begin] >= pv)) )
swap(array[begin], array[end]);
}array[begin] = pv; //基準就位
return begin;
}template < typename t >
static void quick(t array, int begin, int end, bool min2max)
}public:
template < typename t >
static void select(t array, int len, bool min2max=true)
}if( min != i)}}
template < typename t >
static void insert(t array, int len, bool min2max=true)
if( k != i ) //賦值比「比較操作耗時」}}
template < typename t >
static void bubble(t array, int len, bool min2max=true)}}
}template < typename t >
static void shell(t array, int len, bool min2max=true)
if( k != i ) //賦值比「比較操作耗時」
}}while( d > 1 );
}template < typename t >
static void merge(t array, int len, bool min2max=true)
delete helper;
}template < typename t >
static void quick(t array, int len, bool min2max=true)
};}#endif // sort_h
注意:快速排序是一種不穩定的排序演算法
小結:
歸併排序和快速排序
歸併排序 先將問題分解為小問題即乙個個子序列,再將子串行按順序合併。class mergesort mergesort a,0 a.length 1 for int t a public static void mergesort int a,int m,int n public static vo...
歸併排序和快速排序
歸併排序的陣列排序任務可以如下完成 1 把前一半排序 2 把後一半排序 3 把兩半歸併到乙個新的有序陣列,然後再拷貝回原陣列,排序完成。include using namespace std void merge int a,int s,int m,int e,int tmp while p1 m ...
快速排序和歸併排序
遞推公式 merge sort p,r merge merge sort p,q merge sort q 1 r 終止條件 p r 10組測試資料 for let i 0 i 10 i 生成10個隨機元素的測試陣列 function gettestdata return ret 排序函式 func...