49 歸併排序和快速排序

2021-10-10 12:33:43 字數 3512 閱讀 7489

原文: 參考狄泰軟體相關教程

歸併示意圖:

程式入下:

#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...