【排序】--C語言實現快速排序

快速排序

首先簡單描述一下快速排序的過程。

比如有一組數據:

在這裏插入圖片描述

第一步以6爲基數,我們要篩選出,比6大的數字,放在6的後面,比6小的數字,放在6的前面。所以需要兩個指針(下標)。

在這裏插入圖片描述

從y開始,由於【2 < 6】,所以需要用2來覆蓋6(不用擔心6被覆蓋,6已經被記下來了)。同時x++。

在這裏插入圖片描述
接下來從x開始。由於【4 < 6】,就應該放在左邊,所以不要移動元素4。繼續x++。由於【7 > 6】,所以把7放在y對應的位置。同時y–。

在這裏插入圖片描述
再次回到y這邊。【9 > 6】,不需要交換。y–。【1 < 6】,把1放在x所指的位置,同時x++。

在這裏插入圖片描述
再回到x這邊。【3 < 6】,不需要調整位置。x++。【8 > 6】,把元素8放在y所指位置,同時y–。

在這裏插入圖片描述

此時x、y相等,把6放在x或者y所指位置,第一步結束。可以發現,6的前面都是比6小的數字,6的後面都是比6大的數字。

對6前面的數組、6後面的數組,進行同樣的操作。所以代碼中需要遞歸進行。

代碼

#include <stdio.h>

void QuickSort(int *a, int start, int end)
{
    if (start >= end)
    {   
        return;
    }
    
    int x = start;
    int y = end;
    int base = a[start];

    while (x < y)
    {
        while (a[y] > base && x < y)
        {
            y--;
        }

        if (x < y)
        {
            a[x++] = a[y];
        }

        while (a[x] < base && x < y)
        {
            x++;
        }
        
        if (x < y)
        {
            a[y--] = a[x];
        }
    }
    a[x] = base;
    
    QuickSort(a, start, x - 1);
    QuickSort(a, x + 1, end);
}

int main()
{
    int i;
    int array[10] = {9, 3, 4, 4, 6, 0, 1, 3, 8, 5};

    QuickSort(array, 0, sizeof(array) / sizeof(array[0]) - 1);
    for (i = 0; i < sizeof(array) / sizeof(array[0]); i++)
    {
        printf("%d ", array[i]);
    }
    printf("\n");

    return 0;
}

更多視頻、文章、嵌入式學習資源,微信關注 【學益得智能硬件】
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章