快速排序 + 代码实现(C语言)

Posted Stevin的技术博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序 + 代码实现(C语言)相关的知识,希望对你有一定的参考价值。

快速排序过程分析

(1)首先设定一个分界值key,一般使用数组第一个元素,通过该分界值将数组分成左右两部分。
(2)将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边 。此时,左边部分中各元素都小于或等于分界值,而右边部分中各元素都大于或等于分界值。
(3)然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。
重复上述过程,这是一个递归定义。通过递归将左侧部分排好序后,再递归排好右侧部分的顺序。当左、右两个部分各数据排序完成后,整个数组的排序也就完成了。

代码实现

#include <stdio.h>

//快速排序函数 分别传入数组、左边索引、右边索引
void quickSort(int a[], int left, int right) {
    int i = left, j = right,key,t;
    if (left >= right) return; //如果左边索引大于或者等于右边的索引直接退出
    key = a[left];
    while (i < j) {
        while (a[j] >= key && i < j) j--; //该循环完成后a[j] < pk
        while (a[i] <= key && i < j) i++; //该循环完成后a[i] > pk
        // 两个while结束的时候a[i]>a[j]
        if(i < j) {
            t = a[i];
            a[i] = a[j];
            a[j] = t;
        }
    } //while结束的时候i=j
    a[left] = a[i];
    a[i] = key;
    quickSort(a, left, i - 1);
    quickSort(a, i+1, right);
}

//打印输出函数
void display(int array[],int length) {
    for (int i = 0; i < length; i++) {
        printf("%d \\n",array[i]);
    }
}

// 主函数
int main()
{
    int array[] = {12,85,25,16,34,23};
    quickSort(array, 0, 5);
    //sizeof(array) :数组总长度,sizeof(array[0]):数组单个元素长度。做除法求得了数组元素个数
    display(array,sizeof(array) / sizeof(array[0]));
    return 0;
}

运行结果
12 
16 
23 
25 
34 
85 

以上是关于快速排序 + 代码实现(C语言)的主要内容,如果未能解决你的问题,请参考以下文章

快速排序 + 代码实现(C语言)

快速排序 + 代码实现(C语言)

C语言快排

C语言实现九大排序算法(建议收藏!)

C语言实现九大排序算法(建议收藏!)

C语言,快速排序算法