演算法基礎例五快速排序

2021-09-24 13:04:02 字數 1115 閱讀 9303

快速排序

快速排序是一種比較重要的排序方法,快速排序在同為o(n*logn)的幾種排序方法中效率高,因此經常被採用,特別是隨機快排在工程實際中用到的非常多。快速排序的思想和荷蘭國旗的一樣,我們這裡再次回顧一次。

快速排序:將乙個陣列進行排序,選擇最後乙個數作為基準,小於這個數的所有元素放左邊,等於這個數的所有元素放中間,大於這個數的所有元素放右邊。不斷遞迴,得到最後的順序。

看一下**吧:

# include

int p[2]

=;//儲存左邊界和右邊界

void

swap

(int arr,

int i,

int j)

//陣列arr中第i個元素與第j個元素進行交換

void

partition

(int arr,

int left,

int right)

else

if(arr[left]

> arr[right]

)//當前元素大於最右邊元素值,與大於區域交換並再次比較

else

//等於最右邊元素值不用動 }

p[0]= less +1;

//全域性變數形式得到左邊界

p[1]

= more;

//全域性變數形式得到右邊界

}void

quicksort

(int arr,

int left,

int right)

}int

main

(void);

int n,i;

//存放陣列a中元素的個數

n =sizeof

(a)/

sizeof

(a[0])

;/*a[0]是int型, 佔4位元組*/

quicksort

(a,0

,n-1);

//經典快速排序

for(i =

0; i< n; i++

)printf

("\r\n");

return0;

}

排序演算法(五) 快速排序

在陣列中選取乙個數作為基準值,進行乙個partition過程,將小於該數的放在左邊,大於的放在右邊,等於的放在中間,再對左右分別進行該操作。時間複雜度 每次partition可以將乙個數字位置確定,將陣列劃分為兩部分,因此想要有序,理想情況每次剛好兩邊大小一樣,則一共需要logn次partition...

排序演算法(五) 快速排序

快速排序是一種效率很高的排序演算法,也是我們使用最多的一種排序演算法。快速排序原理 兩個指標分別指向陣列兩頭元素,將陣列第乙個元素儲存下來,作為基準數,兩個指標開始向中間移動,先移動陣列尾部指標,直到發現所指元素比基準數小時,將這時候所指向的數賦值給陣列頭部指標指向的位置,然後尾部指標停止移動,頭部...

排序演算法五 快速排序

取陣列最中間的那個數為基數 取哪乙個數為基數都可以,取中間的只是為了好理解 在左邊找乙個比基數大的數,在右邊找乙個比基數小的數,如果找到就交換兩個數的位置,交換過後再向下尋找,直到左邊的角標大於等於右邊則退出,一輪排序後,基數的左邊一定都是比基數小的,基數的右邊一定是比基數大的,注意 基數不一定還在...