策略模式(strategy):它定義了演算法家族,分別封裝起來,讓它們之間可以相互替換,此模式讓演算法的變化,不會影響到使用演算法的客戶。
排序介面:
isort.h
#pragma once
class
isort
virtual
void
dosort
(int a,
int len)=0;};
氣泡排序演算法類bobblesort.h
#pragma once
#include
"isort.h"
class
bobblesort
:public isort}}}};
插入排序演算法類insertsort.h:
#pragma once
#include
"isort.h"
class
insertsort
:public isort
else}}}};
選擇排序演算法類selectsort:
#pragma once
#include
"isort.h"
class
selectsort
:public isort
temp = arr[i]
; arr[i]
= arr[minindex]
; arr[minindex]
= temp;}}
};
快速排序演算法類quicksort.h
#pragma once
#include
"isort.h"
class
quicksort
:public isort
private
:int
quicksortpartition
(int s,
int l,
int r)
s[i]
= x;
//i的位置放了x,所以其左側都小於x,右側y都大於x
return i;
}void
quicksort
(int s,
int l,
int r)
// 劃分,返回基準點位置
int i =
quicksortpartition
(s, l, r)
;// 遞迴處理左右兩部分,i處為分界點,不用管i了
quicksort
(s, l, i -1)
;quicksort
(s, i +
1, r);}
};
context.h
#pragma once
#include
"isort.h"
class
context
void
startsort
(int arr,
int len)
}private
: isort *m_sortbase;
};
客戶端程式:
#include
"context.h"
#include
#include
"bobblesort.h"
#include
"quicksort.h"
#include
"insertsort.h"
#include
"selectsort.h"
//陣列列印
void
printarray
(int a,
int len)
intmain()
;printarray
(arr, len)
; std::cout <<
"排序後:"
<< std::endl;
isort* sortalgorithm =
newquicksort()
;//或者isort* sortalgorithm = new quicksort();根據需要選擇演算法類
context* context =
newcontext
(sortalgorithm)
; context-
>
startsort
(arr, len)
;printarray
(arr, len)
;delete sortalgorithm;
delete context;
getchar()
;return0;
}
執行結果:
3-5
-656
排序後:-6
-535
6
參考:
策略模式-排序演算法
c++ 策略模式呼叫不同的排序演算法
排序與設計模式
策略模式和排序演算法
常用的排序演算法有選擇排序,插入排序,氣泡排序,快速排序,歸併排序,希爾排序,堆排序這7種。假設現在有7個陣列,他們分別需要用到這7種排序方式的其中乙個進行排序應該怎麼辦呢。最常見的辦法就是寫乙個這樣的工具類 created by hao on 2016 6 19.public class sort...
資料結構 排序演算法(策略模式)
策略模式,以排序為例 inte ce strategy class quicksortstrategy strategy class bubblesortstrategy strategy if flag 括號裡預設為true的時候執行下面的 或者這麼寫也可flag false console.wr...
策略模式之策略列舉
在使用策略模式時,我們要建立相應的策略,然後根據不同的場景使用不同的策略,這是可以的,但畢竟那是一堆的策略類,使用起來 的可讀性 擴充套件性也就一般,這種情況下我們可以使用策略模式的公升級版 策略列舉來解決上邊的問題 列舉類 public enum strategyenum sub muti str...