歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 快速排序(C語言實現)

快速排序(C語言實現)

日期:2017/3/1 10:02:23   编辑:Linux編程

1.起因
今天在acm刷題的時候,之前的排序算法一直都是冒泡,可能九度OJ的難度題考察的都是快速排序,導致我都是死在time limited上,因此我下決心要學習一下快速排序,心得跟大家進行分享!

2.算法思想
快速排序采用了一種分治策略,我感覺它就是歸並排序的優化,學術上稱之為分治法(Divide-and-ConquerMethod)
(1)分治的基本思想:
將原問題分解成若干個規模更小但是結構跟原問題相似的子問題。遞歸的解決這些子問題,然後將這些子問題的解喝並為原問題的解
(2)快速排序的思想:
設當前需要排序的數組為int A[low..high]
分解:
在A[]中任選一個記錄作為基准(pivot),以pivot為基准將數組A劃分為兩個小的數組A[low..pivot-1]和A[pivot+1..high],並使左邊的數組元素均小於等於pivot,右邊數組元素均大於等於piovt。此時,pivot處於正確的位置上,它不需要再參加後續的排序
求解:
遞歸的調用快速排序,對A[low..pivot-1]和A[pivot+1..high]進行快速排序
組合:
跟歸並排序不同,因為每次調用快速排序,左右兩個數組均已有序,因此對於快速排序來說,組合是一個空操作

3.快速排序程序實現
主流程:

/**
* Description:快速排序主流程
*/
void quicksort(int *A, int p, int r)
{
int pivot;

if( p < r)
{
pivot = partition(A, p, r);
quicksort(A, p, pivot - 1);
quicksort(A, pivot+1, r);
}
}

注意:為排序整個數組,只需要在main函數中調用一個quicksort(A,begin,end)即可完成對數組的排序。

Copyright © Linux教程網 All Rights Reserved