快速排序算法

1.快速排序的思想數組

  給第一個元素找到在數組中的位置,這個位置就是這個元素最終在數組中的位置,而後給這個元素左右兩側進行遞歸排序。spa

2.代碼code

#include <stdio.h>

void Qsort(int a[], int low, int high)
{
    if(low >= high)
        return;
    
    int first = low;
    int last = high;
    int key = a[first];
 
    while(first < last){
        while(first < last && a[last] >= key)
            --last;
 
        a[first] = a[last];
 
        while(first < last && a[first] <= key)
            ++first;
         
        a[last] = a[first];    
    }
    
    a[first] = key;

    Qsort(a, low, first-1);
    Qsort(a, first+1, high);
}

int main()
{
    int a[] = {57, 68, 59, 52, 72, 28, 96, 33, 24};
 
    Qsort(a, 0, sizeof(a) / sizeof(a[0]) - 1);
 
    for(int i = 0; i < sizeof(a) / sizeof(a[0]); i++)
        printf("%d\n", a[i]);
     
    return 0;
}

   代碼說明:blog

    [1]把第一個值做爲key,並保存下來,此時數組第一個位置就空出來了。排序

    [2]以後進入循環,每一個循環:首先從後往前找,找到小於key的,放到空出的位置,此時當前的位置就空出來了。而後從前日後找,找到大於key的,則放到空出的位置,此時當前的位置就空出來了。遞歸

    [3]把key放到當前空出的位置,這個位置就是key最終在數組的位置。io

    [4]遞歸排序key左右兩側數組。ast

  總結:class

    整個思想就是留一個空位置(第一個位置),以後從前日後,從後往前跟key比較以後,移動值到這個空位置,最後first>=last時,此時,空位置的左側都小於key,而右側都大於key,因此把key放到當前的空位置。循環

相關文章
相關標籤/搜索