排序演算法 快速排序

2021-08-17 23:24:10 字數 3361 閱讀 4328

**理論:**在一組需要被排序的數中,以第乙個數字基數,將小與它的數排它左邊,大於它的數排右邊,這樣給這個基數排好位置,左邊又是一組數,右邊是一組數,再對每組數單獨進行相同的操作,一直遞迴下去,具體看圖

比如說我需要對這十個數進行排序,左邊 "小兵(i)"剛開始站在基數上,右邊 "小兵(j)"開始向左找,找比6小的數,找到就在那停下。

接著左邊 "小兵(i)"開始向右找比6大的數,找到就停下,然後兩個進行交換

交換之後如下

然後 j 繼續左移找比6小的數,在4處停下來,然後 i繼續右移找比6大的數,在9處停下來,交換

接著j繼續左移,在3停了,i 右移在3處碰到 j

這時候將 i 和 j 碰到的數字與基數(6)交換

這樣一輪就結束了,接著對  「6左邊的數」 「6右邊的數」  進行相同的操作,遞迴下去。

具體實現

#include "stdafx.h"

#include "iostream"

using namespace std;

int a[100];

void quick_sorting(int a, int length)

while (a[i] <= tmp && i < j)

if (i < j)

}ch = a[0];

a[0] = a[i];

a[i] = ch;

quick_sorting(&a[0], i);

quick_sorting(&a[i + 1], length - i -1);

return;}}

int main()

結果

#include

using namespace std;

void

swap

(int

* a,

int* b)

//找乙個值,左邊比它小,右邊比它大,返回此值的index

intpartition

(int data,

int length,

int start,

int end)

}//結束遍歷之後,data[mid] <= data[start]

swap

(&data[mid]

,&data[start]);

return mid;

}void

quicksorting

(int data,

int length,

int start,

int end)

void

test1

(void);

int length =

sizeof

(data)

/sizeof

(int);

quicksorting

(data, length,

0, length-1)

;if(data[0]

==1) cout <<

"test1 passed"

<< endl;

}void

test2

(void);

int length =

sizeof

(data)

/sizeof

(int);

quicksorting

(data, length,

0, length-1)

;for

(int i=

1; i<=

5; i++

) cout <<

"test2 passed"

<< endl;

}void

test3

(void);

int length =

sizeof

(data)

/sizeof

(int);

quicksorting

(data, length,

0, length-1)

; cout <<

"test3 passed"

<< endl;

//如果沒出現異常

}void

test4

(void);

int length =

sizeof

(data)

/sizeof

(int);

quicksorting

(data, length,

0, length-1)

;if(data[0]

!=2)return;if

(data[1]

!=3)return;if

(data[2]

!=22

)return;if

(data[3]

!=365

)return;if

(data[4]

!=431

)return;if

(data[5]

!=5365

)return

; cout <<

"test4 passed"

<< endl;

}int

main

(int argc,

char

** argv)

排序演算法 快速排序演算法

網際網路的大型公司還在火熱招聘中,參與了一次又一次的筆試,都不通過,我還是太菜!作為程式設計人員,需要邁過去 資料結構與演算法 這個坎,畢竟,筆試不會真的很虧,加油吧,少些水,多點實操。一 快速排序演算法思想 從一組資料中找出乙個基準值,一般是選擇中間值作為基準值,然後從左到右將值與基準值進行比較,...

演算法 排序演算法 快速排序

快速排序是對冒泡法排序的一種改進。快速排序演算法 的基本思想是 將所要進行排序的數分為左右兩個部分,其中一部分的所有資料都比另外一 部分的資料小,然後將所分得的兩部分資料進行同樣的劃分,重複執行以上的劃分操作,直 到所有要進行排序的資料變為有序為止。可能僅根據基本思想對快速排序的認識並不深,接下來以...

排序演算法 快速排序

快速排序使用分治法 divide and conquer 策略來把乙個序列 list 分為兩個子串行 sub lists 步驟為 1.從數列中挑出乙個元素,稱為 基準 pivot 2.重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的後面 相同的數可以到任一邊 在這個分...