快速排序

本文详细介绍了快速排序算法的两种分区函数实现方法及排序过程,并提供了完整的C语言代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

快速排序是分治算法的应用之一,关键在Division函数的设计,Division函数的用途是使得特征值所在位置的左边的值都小于特征值,右边位置的值都大于特征值。

1.Division的一种

int Division(int Data[], int Left, int Right)
{
    int Base, j, i, t;
    Base = Data[Right];
    i = Left - 1;
    for (j = Left; j < Right; j++)
    {
        if (Data[j] < Base)
        {
            i++;
            //交换i,j的值
            t = Data[i];
            Data[i] = Data[j];
            Data[j] = t;
        }
    }
    t = Data[Right];
    Data[Right] = Data[i + 1];
    Data[i + 1] = t;
    return i + 1;
}

2.Division的另一种

int Division2(int Data[], int Left, int Right)
{
    int Base;
    Base = Data[Left];
    while (Left < Right)
    {
        while (Left < Right && Data[Right] >= Base)
        {
            Right--;
        }
        Data[Left] = Data[Right];
        while (Left < Right && Data[Left] < Base)
        {
            Left++;
        }
        Data[Right] = Data[Left];
    }
    Data[Left] = Base;
    return Left;
}

3.QuickSort函数

void QuickSort(int Data[], int Left, int Right)
{
    int i;
    if (Left < Right)
    {
        i = Division2(Data, Left, Right);
        QuickSort(Data, Left, i - 1);
        QuickSort(Data, i + 1, Right);
    }
}


 

main函数

#include<stdio.h>
int Division(int Data[], int Left, int Right);
int DivisionByHoare(int Data[], int Left, int Right);
void QuickSort(int Data[], int Left, int Right);
void PrintData(int Data[], int DataLength);
int main()
{
    int N, i;
    int Data[100];
    scanf("%d", &N);
    for (i = 0; i < N; i++)
    {
        scanf("%d", &Data[i]);
    }
    QuickSort(Data, 0, N - 1);
    PrintData(Data, N);
    return 0;
}
void PrintData(int Data[], int DataLength)
{
    int i;
    for (i = 0; i < DataLength; i++)
    {
        printf("%d ", Data[i]);
    }
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值