1. 程式人生 > >C語言筆記17--快速排序簡單實現

C語言筆記17--快速排序簡單實現

快速排序(QuickSort)是一種排序演算法,並且非常的實用。快速排序的原理是先找一個基準值,然後和序列的每個值比較,大於基準值的放在基準值右邊,小於基準值的放在左邊。那麼陣列將會被分割成兩組,左邊的是小於基準值的,右邊是大於基準值的,那就是說基準值的位置已經確定。然後分別為這兩組找基準值進行分割,經過遞迴後,陣列的元素位置都會確定。

#include<stdio.h>
#include<stdlib.h>
#define M 10//作為陣列的長度
//列印陣列
void printfarray(int *p,int len)
{
    for(int *temp=p;temp<p+len;temp++)
    {
        printf("%3d",*temp);
    }
    printf("\n");
}
//交換兩個值
void swap(int *pa,int *pb)
{
   int temp=*pa;
    *pa=*pb;
    *pb=temp; 
}
void quicksort(int *p,int left,int right)
{    
    int i=left;//副本
    int j=right;//副本
    if(i<j)//i要小於j
    {
        while(i<j)
        {
            while(p[left]>p[i])//p[left]作為基準值
            {
                i++;//從左往右,直到找到有大於基準值的退出迴圈
            }
            while(p[left]<=p[j])
            {
                j--;//從右往左,直到找到有小於基準值
            }
            swap(&p[i],&p[j]);//交換兩者
        }
        //當i不小於j時,剛好把陣列遍歷了一次,找到了第一個基準值的位置
        //p[j]作為新的基準值,此時的p[left]值位置已經確定
        swap(&p[left],&p[j]);
        quicksort(p,left,j-1);//p[j]值已經確定位置
        quicksort(p,j+1,right);
    }
}
void main()
{
    int a[M]={ 35, 23, 45, 66, 78, 30, 14, 8, 54, 15};//隨機寫的陣列
    printfarray(a,M);
    quicksort(a,0,M-1);
    printfarray(a,M);
    system("pause");
}