C 模板函式 007 排序,又見排序

2021-10-23 00:19:50 字數 2183 閱讀 6882

描述

自己編寫乙個能對任何型別的陣列進行排序的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...