排序六之快速排序

Quick Sort

一种类似于冒泡排序的排序算法;并对冒泡排序进行了改进,基于交换排序思想。

快速排序算法通过多次比较和交换来实现排序,其排序流程如下:

1:首先设定一个分界值,通过该分界值将数组分成左右两个部分。

2:将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数据的左边。此时,左边部分中各元素都小于等于分界值,而右边部分中各元素都大于等于分界值。

3:然后,左边和右边的数据可以独立排序。对于左侧的数组数据,,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧数据也可以做类似处理。

4:重复上述过程,可以看出,这是一个递归定义。通过递归将左侧部分排好序后,再递归排好右侧部分的数据。当左、右两个部分各数据排序完成后,整个数组的排序也就完成了。

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define SIZE 10
void QuickSort(int *a,int l,int r)
{
    int temp;
    int i=l,j=r;
    if(l<r)
    {
        temp=a[l];
        while(i!=j)
        {
            while(j>i&&a[j]>temp) --j;
            if(i<j)
            {
                a[i]=a[j];
                ++i;
            }
            while(i<j&&a[i]<temp) ++i;
            if(i<j)
            {
                a[j]=a[i];
                --j;
            }
        }
        a[i]=temp;
        QuickSort(a,l,i-1);
        QuickSort(a,i+1,r);
    }
}
int main()
{
    int i;
    int shuzu[SIZE];
    srand(time(NULL));
    for(i=0;i<SIZE;i++)
        shuzu[i]=rand()/1000+100;
    printf("排序前的数组为:\n");
    for(i=0;i<SIZE;i++)
        printf("%d ",shuzu[i]);
    printf("\n");
    QuickSort(shuzu,0,SIZE-1);
    printf("排序后的数组为:\n");
    for(i=0;i<SIZE;i++)
        printf("%d ",shuzu[i]);
    printf("\n");
        return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值