常見排序演算法的實現 交換排序

2021-09-26 08:21:05 字數 3529 閱讀 5809

交換排序:

交換排序的分類:

氣泡排序

快速排序

1.氣泡排序:

思想:從陣列的末尾元素開始比較兩個元素的大小,然後根據大小換位置,直到將最大或最小的元素排到陣列的起始位置;

**實現如下:

void

swap

(int

*left,

int* right)

void

bubblesort

(int arr,

int size));

}}}}

intmain()

int size=

sizeof

(arr)

/sizeof

(arr[0]

);bubblesort

(array,size)

;return0;

}

2.快速排序:

思路:三大步:

第一步:確定乙個基準值;

找基準值的方法:

1.選邊上;

2.隨機法;

3.三數取中法:區間最左邊,區間最右邊,選值是中間乙個數;

(第二種和第三種方法需要把值交換到邊上)

第二步:做分割:遍歷整個陣列區間,比較每個數和基準值的大小關係,遍歷結束後讓比基準值小的放大它左邊,比基準值大的放到它右邊(左邊比基準值小,右邊比基準值大)

關於做分割的具體三種方法:

1.hover法(左右指標法/左右下標法)

//對陣列中的[low,hight]的區間進行分組,基準值是array[low]

intpartition

(int array,

int low,

int hight)

while

(begin

>=piove)

//array[begin]比基準值大了,交換begin和end下標處的資料;

swap

(array,begin,end);}

//low基準值;

//[low+1,begin] 比基準值小;

//[begin+1,high] 比基準值大;

//把基準值和比他小的最後乙個數進行交換;

swap

(array,low,begin)

;return begin;

}

2.挖坑法:(通過來回填坑進行交換)

int

partition

(int array,

int low,

int high)

//array[begin]比基準值大了,坑的下標是end;

//array[end] = array[begin];

//begin變為坑的下標;

while

(begin

>= pivot)

//array[end]比基準值小了,坑的下標就是begin;

array[begin]

= array[end]

;//end是坑的下標;

}//low基準值;

//[low+1,begin] 比基準值小;

//[begin+1,high] 比基準值大;

//最後把基準值填到最後乙個坑;

array[begin]

= pivot;

return begin;

}

3.前後指標法:

int

partition

(int array,

int low,

int high)

i++;}

swap

(array, d -

1, low)

;return d -1;

}

第三步:採用乙個分治演算法;按同樣的方式,分別對同樣兩個小區間進行處理,直到分出來的小區間的長度個數 <= 1, 就可以停止;

快速排序演算法的實現:

1.通過遞迴的方法進行查詢:

int

partition

(int array,

int low,

int hight)

while

(begin

>=poive)

array[begin]

=array[end];}

array[begin]

=piove;

return begin;

}void

_quicksort

(int array,

int low,

int high)

if(low > high)

//1.找基準值,選最左邊,基準值得下標是low;

//2.遍歷整個區間,把小的放左邊,大的放右邊,返回基準值所在下標;

int pivotidx =

partition

(array, low, high)

;//3.區間被分為三部分:

//[low,pivotidx-1] 小

//[pivotidx,pivotidx] 有序

//[pivotidx+1,high] 大

//4.分治演算法,分別呼叫兩個小區間;

_quicksort

(array,low, pivotidx -1)

;_quicksort

(array,pivotidx +

1, high)

;//直到區間長度為0,或區間長度為1,表示區間的數已經有序;

}void

quicksort

(int array,

int size)

2.非遞迴的快速排序:
#include 

void

quicksortnor

(int array,

int size)

int pivotidx =

partition

(array, low, high)

;[low,pivotidx-1]

stack.

push

(low)

; stack.

push

(pivotidx -1)

;[pivotidx+

1,high]

stack.

push

(pivotidx +1)

; stack.

push

(high);}

}

常見排序演算法 交換排序

交換排序的基本思想是 兩兩比較待排序記錄的關鍵字,發現兩個記錄的次序相反時即進行交換,直到沒有反序的記錄為止。應用交換排序基本思想的主要排序方法有 氣泡排序和快速排序。氣泡排序 1 排序方法 將被排序的記錄陣列r 1.n 垂直排列,每個記錄r i 看作是重量為r i key的氣泡。根據輕氣泡不能在重...

常見的排序演算法 交換排序

交換排序 利用交換元素的位置進行排序的方法稱作交換排序。常見的交換排序的方法 氣泡排序和快速排序。氣泡排序 基本思想 如下void bubblesort int array,int size 總結 快速排序 基本思想 快速排序是hoare於1962年提出的一種二叉樹結構的交換排序方法,其基本思想為 ...

交換排序演算法實現

include template void swap elem a,int p1,int p2 template void print elem a,int length template void bub sort elem a,int length template void insert so...