交換排序(快速排序 氣泡排序)

2021-07-23 20:31:31 字數 1704 閱讀 1987

1.快速排序:

先從數列中取出乙個數作為基準數

;分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊

;再對左右區間重複第二步,直到各區間只有乙個數。

以乙個陣列作為示例,取區間第乙個數為基準數。0

1 2

3 4

5 6

7 8

9 72

6 57

88 60

42 83

73 48

85 初始時,i = 0;  j = 9;   x = a[i] = 72

由於已經將a[0]中的數儲存到

x中,可以理解成在陣列

a[0]

上挖了個坑,可以將其它資料填充到這來。

從j開始向前找乙個比

x小或等於

x的數。當

j=8,符合條件,將

a[8]

挖出再填到上乙個坑

a[0]

中。a[0]=a[8]; i++; 

這樣乙個坑

a[0]

就被搞定了,但又形成了乙個新坑

a[8]

,這怎麼辦了?簡單,再找數字來填

a[8]

這個坑。這次從

i開始向後找乙個大於

x的數,當

i=3,符合條件,將

a[3]

挖出再填到上乙個坑中

a[8]=a[3]; j--;

當i=5時,由於

i==j

退出。此時,i = j = 5,而

a[5]

剛好又是上次挖的坑,因此將x填入

a[5]。

/*快速排序*/

#include using namespace std;

const int maxn = 100;

int n;

void quick_sort(int s, int left, int right)

s[j] = s[i];

} s[i] = pole;

// for(int k = 0; k

二.交換排序

氣泡排序:

氣泡排序是最簡單的排序之一了,其大體思想就是通過與相鄰元素的比較和交換來把小的數交換到最前面。這個過程類似於水泡向上公升一樣,因此而得名。舉個栗子,對5,3,8,6,4這個無序序列進行氣泡排序。首先從後向前冒泡,4和

6比較,把

4交換到前面,序列變成

5,3,8,4,6

。同理4和8

交換,變成

5,3,4,8,6,3和4

無需交換。5和

3交換,變成

3,5,4,8,6,3.

這樣一次冒泡就完了,把最小的數

3排到最前面了。對剩下的序列依次冒泡就會得到乙個有序序列。氣泡排序的時間複雜度為

o(n^2)

。/*氣泡排序*/

#include using namespace std;

const int maxn = 100;

void swap(int arr, int i, int j)

void print(int arr, int n, int i)

{ printf("%d: ",i);

for(int j = 0; ji; j--)

{ if(arr[j]

快速排序講解部分來自:

講的很清楚推薦!

交換排序 氣泡排序,快速排序

交換排序 氣泡排序,快速排序 執行環境 vs2010 include include include include define ok 1 define true 1 define false 0 define maxsize 50 typedef struct redtype typedef s...

交換排序(氣泡排序,快速排序)

氣泡排序演算法 顧名思義,就是將最重的 最大元素 浮動到最下面,最輕的 最小元素 浮動到最上面 演算法過程 1.迴圈陣列長度length 1次,下標為 因為每次迴圈後就會出現乙個最大 公升序 或最小 降序 只需要比較n 1就行 1.1 在前 length i個元素中迴圈因為已經有i個已經有序 1.1...

交換排序 氣泡排序 快速排序

void bubblesort int arr,int size if issorted 1 void quicksort int arr,int left,int right if left right int div partition 01 arr,left,right 分成左右小區間 lef...