快速排序
快速排序是一種比較重要的排序方法,快速排序在同為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...
排序演算法(五) 快速排序
快速排序是一種效率很高的排序演算法,也是我們使用最多的一種排序演算法。快速排序原理 兩個指標分別指向陣列兩頭元素,將陣列第乙個元素儲存下來,作為基準數,兩個指標開始向中間移動,先移動陣列尾部指標,直到發現所指元素比基準數小時,將這時候所指向的數賦值給陣列頭部指標指向的位置,然後尾部指標停止移動,頭部...
排序演算法五 快速排序
取陣列最中間的那個數為基數 取哪乙個數為基數都可以,取中間的只是為了好理解 在左邊找乙個比基數大的數,在右邊找乙個比基數小的數,如果找到就交換兩個數的位置,交換過後再向下尋找,直到左邊的角標大於等於右邊則退出,一輪排序後,基數的左邊一定都是比基數小的,基數的右邊一定是比基數大的,注意 基數不一定還在...