排序--快速排序

Posted 可口可乐不加冰

tags:

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

原理:快速排序需要选择一个元素作为key,然后以key为基准,比key小的放在左边,比key大的放在右边,这是一次过程。一次划分为两个区间,左右区间再用同样的方法进行排序,当最小区间排序完成,则快速排序完成,可返回结果。

key元素选择:每次选择末尾元素作为当前区间的key

源代码:用户先录入设定大小个数的元素,元素在一行用空格分隔,然后进行排序,在一行输出结果,元素用空格分隔,可循环实现。

 

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int part_sort(int *array, int left, int right)
{
    int key = array[right];
    while(left < right)
    {
        while(left < right && array[left] <= key)
            left++;
        array[right] = array[left];

        while(left < right && array[right] >= key)
           right--;
        array[left] = array[right];
    }
    array[left] = key;
    return left;
}


void quicksort(int *array, int left, int right)
{
    if(left >= right)
    {
        return;
    }
    int temp_right = 0;
    temp_right = part_sort(array, left, right);
    quicksort(array, temp_right + 1, right);
    quicksort(array, left, temp_right - 1);
}
int main()
{
    while(1)
    {
        int num = 0;
        int i = 0;
        printf("请输入需要排序的数字的个数\\n");
        scanf("%d",&num);
        printf("输入整数大小为:%d\\n", num);
        int array[num];
        memset(array, 0, num);
        if(i < num)
        {
            while(scanf("%d",&array[i++]))
            {
                if(getchar() == \'\\n\')
                break;
            }
        }

        quicksort(array, 0, i);
        printf("快排后的结果为:");
        for(int j = 0; j < num; j++)
        {
            printf("%d ", array[j]);
        }
        system("pause");
    }
    return 0;
}

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

快速排序

深度解析(十六)快速排序

Python实现排序算法之快速排序

排序算法入门之快速排序(java实现)

经典排序——快速排序

基于快速排序方法改成求第k大的数