【排序】--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;
}

更多视频、文章、嵌入式学习资源,微信关注 【学益得智能硬件】
在这里插入图片描述

发布了33 篇原创文章 · 获赞 62 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/xiaopengX6/article/details/104967993