快速排序算法

Posted ne-liqian

tags:

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

1.快速排序的思想

  给第一个元素找到在数组中的位置,这个位置就是这个元素最终在数组中的位置,然后给这个元素左右两侧进行递归排序。

2.代码

#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
", a[i]);
     
    return 0;
}

   代码说明:

    [1]把第一个值作为key,并保存下来,此时数组第一个位置就空出来了。

    [2]之后进入循环,每个循环:首先从后往前找,找到小于key的,放到空出的位置,此时当前的位置就空出来了。然后从前往后找,找到大于key的,则放到空出的位置,此时当前的位置就空出来了。

    [3]把key放到当前空出的位置,这个位置就是key最终在数组的位置。

    [4]递归排序key左右两侧数组。

  总结:

    整个思想就是留一个空位置(第一个位置),之后从前往后,从后往前跟key比较之后,移动值到这个空位置,最后first>=last时,此时,空位置的左侧都小于key,而右侧都大于key,所以把key放到当前的空位置。

 

以上是关于快速排序算法的主要内容,如果未能解决你的问题,请参考以下文章

一行Python代码搞定快速排序算法

排序算法 | 快速排序(含C++/Python代码实现)

交换排序(冒泡排序快速排序的算法思想及代码实现)

快速排序/快速选择算法

快速排序算法详解及代码实现

排序算法——快速排序的图解代码实现以及时间复杂度分析