策略模式之排序演算法

2021-10-04 12:31:29 字數 2710 閱讀 5212

策略模式(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...