快速排序C语言

快速排序

是对气泡排序的一种改进,思想是:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以此达到整个序列有序。
具体做法为:先将枢轴记录存起来,附设两个指针low和high,初值分别为low high,设枢轴记录的关键字为pivotkey,则首先从high所指位置起向前搜索找到第一个小于pivotkey的关键字记录移到低端,然后从low 所指位置起向后搜索,找到关键字大于pivotkey 的记录移动到高端,重复这两步骤直至low=high,一趟排序后将枢轴记录移到关键的位置。在这里插入代码片

#include<stdio.h>
int partion(int b[], int low, int high);
void quick_sort(int b[], int low,int high);
int main()
{
    int length = 0;
    int a[10] = {15,100,49,24,43,1000,4355,3,344,67};
    length = sizeof(a) / sizeof(int);
    quick_sort(a,0,length-1);
    for(int i = 0;i < length; ++i)
    {
        printf("a[%d] is %d\n",i , a[i]);
    }
    return 0;
}
void quick_sort(int b[], int low,int high)
{
    //对顺序表b 中的子序列b[low..high]作快速排序
    int pivotloc = 0;
    if(low < high)
    {
        pivotloc = partion(b, low, high); // 将b[low..high]一分为二
        quick_sort(b, low, pivotloc-1);   // 对低子表递归排序,pivotloc 是枢轴位置
        quick_sort(b, pivotloc+1, high);  //对高字表递归排序
    }
}
int partion(int b[], int low, int high)
{
    //交换顺序表L中字表b[low..high]的记录,使枢轴记录到位,并返回其所在位置
    //此时在它之前(后)的记录均不大(小)于它。
    int temp = b[low];                     //用子表的第一个记录作枢轴记录
    int pivotkey = b[low];					//枢轴记录关键字					
    while(low < high)						//从表的两端交替的向中间进行扫描
    {
        while(low <high && b[high] >= pivotkey)
            --high;
        b[low] = b[high];                   //将比枢轴小的记录移到低端
        while(low < high && b[low] <= pivotkey)
            ++low;
        b[high] = b[low];					//将比枢轴大的记录移到高端
    }
    b[low] = temp;							//枢轴记录到位
    return low;								//返回枢轴位置
}

运行结果:

[Running] cd "d:\vscodec\" && g++ test0910.cpp -o test0910 && "d:\vscodec\"test0910
a[0] is 3
a[1] is 15
a[2] is 24
a[3] is 43
a[4] is 49
a[5] is 67
a[6] is 100
a[7] is 344
a[8] is 1000
a[9] is 4355

[Done] exited with code=0 in 0.49 seconds
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值