歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

快速排序(C語言實現)

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