1. 程式人生 > >最常用的排序演算法——快速排序

最常用的排序演算法——快速排序

最常用的排序演算法,當然是快速排序演算法了,下面給出可以直接執行的快速排序演算法思想和程式碼:

思想:

①一般設定第一個數為基準數;

②先從右往左找一個小於基準數的數,在從左往右找一個比基準數大的數,然後交換他們;

   繼續,直到兩邊探測變數“相遇”;

③交換“相遇”位置的數字和基準數位置(即第一個數的位置),從而把基準數放置與中間位置;

④基準數左邊:比基準數小,採用遞迴繼續重複

⑤基準數右邊:比基準數大,採用遞迴繼續重複

話不多說,直接上碼(c語言實現的):

#include "stdio.h"
/*
 * 快速排序演算法
 */
int n;
int a[100];

void quicksort();

int main(){
    int i, j;

    printf("請輸入待排序的數的個數:");
    scanf("%d", &n);

    printf("請輸入待排序的數列:");
    for(i=0; i<n; i++)
    {
        scanf("%d", &a[i]);
    }

    quicksort(0, n-1);

    printf("排序後的數列為:");
    for(i=0; i<n; i++)
    {
        printf("%d", a[i]);
    }

    return 0;

}

void quicksort(int startIndex, int endIndex)
{
    int i, j, t;
    int temp; //定義基準數

    if(startIndex > endIndex)
        return;

    temp = a[startIndex];
    i = startIndex;
    j = endIndex;

    while(i != j)
    {
        while(a[j]>=temp && i<j)
        {
            j--;
        }
        while(a[i]<=temp && i<j)
        {
            i++;
        }
        if(i<j)
        {
            t = a[j];
            a[j] = a[i];
            a[i] = t;
        }
    }
    //基準數歸位
    a[startIndex] = a[i];
    a[i] = temp;

    quicksort(startIndex, i-1);
    quicksort(i+1, endIndex);

    return;
}

快速排序演算法採用了遞迴的思想。