描述
自己編寫乙個能對任何型別的陣列進行排序的mysort函式模版。只能寫乙個mysort模板,不能寫mysort函式!
#include
using
namespace std;
bool
greater2
(int n1,
int n2)
bool
greater1
(int n1,
int n2)
bool
greater3
(double d1,
double d2)
template
<
classt1,
class
t2>
void
mysort
(// 在此處補充你的**
#define num 5
intmain()
;mysort
(an,an+num,greater1)
;//從小到大排序
for(
int i =
0;i < num; i ++
) cout << an[i]
<<
",";
mysort
(an,an+num,greater2)
;//從大到小排序
cout << endl;
for(
int i =
0;i < num; i ++
) cout << an[i]
<<
",";
cout << endl;
double d[6]
=;mysort
(d+1
,d+5
,greater3)
;//將陣列從下標1到下標4從小到大排序
for(
int i =
0;i <
6; i ++
) cout << d[i]
<<
",";
return0;
}
輸入
無輸出
4,8
,10,11
,123
,123,11
,10,8
,4,1.4
,1.2
,1.8
,3.1
,3.2
,2.1
,
解題
構建模板函式——左開右閉
關鍵點
模板的型別——t為int * 的話,進行swap時無法利用模板t對temp變數定義型別,無法進行交換
故t必須為int,需在函式上寫t *s。
template
<
classt1,
class
t2>
void
mysort
(t1 *s, t1 *e, t2 rule)}}
}
或者將swap寫在外面,無需在函式內部構建臨時變數,則可使t為int * 型別;
template
<
class
t>
void
swap
( t & a, t & b)
template
<
classt1,
class
t2>
void
mysort
( t1 start , t1 end, t2 myless )}}
}
另一種辦法,利用auto,自適應變數的型別;
template
<
classt1,
class
t2>
void
mysort
( t1 start , t1 end, t2 myless )}}
}
易錯點
模板變數t 的型別要仔細核對,函式中t 和 t*要分清楚。
033 排序,又見排序
描述 自己編寫乙個能對任何型別的陣列進行排序的mysort函式模版。只能寫乙個mysort模板,不能寫mysort函式!include using namespace std bool greater2 int n1,int n2 bool greater1 int n1,int n2 bool g...
007 排序演算法 堆排序
一 概述 堆排序 英語 heapsort 是指利用堆這種資料結構所設計的一種排序演算法。堆是乙個近似完全二叉樹的結構,並同時滿足堆積的性質 即子結點的鍵值或索引總是小於 或者大於 它的父節點。排序方法 時間複雜度 平均 時間複雜度 最壞 時間複雜度 最好 空間複雜度 穩定性堆排序 o nlogn o...
c 程式設計練習 033 排序,又見排序
北大程式設計與演算法 三 測驗題彙總 2020春季 自己編寫乙個能對任何型別的陣列進行排序的mysort函式模版。只能寫乙個mysort模板,不能寫mysort函式!include using namespace std bool greater2 int n1,int n2 bool greate...