快速排序

已经很久没有发表博文了,人生中有很多噼里啪啦的事情让我们在这个世界中过得坎坎坷坷,跌宕起伏,就和力哥说的一样用平常心去看待吧,这也算的上一个自我安慰吧,加油,相信自己永远是最棒的!

快速排序

大致思想:
首先是运用了分治的思想,同时不同与分治排序一样,这个算法的思想主要是在一段无序数组中选取一个数字作为一个中间值,然后将这个数组中的数字以这个中间值为基准各自分往数组的两边。
代码:

/*************************************************************************
    > File Name: 1076.c
    > Author: 
    > Mail: 
    > Created Time: 2015年06月18日 星期四 20时51分31秒
 ************************************************************************/

//快速排序
//输入n个数,进行排序
//输入:
//5
//5 4 3 2 1
//输出:
//1 2 3 4 5
//
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int i,j,k,n,a[100002];
int partition(int low,int high)
{
    //这个a[0]就是用来这段数组中
    //设定的中间值,往往我们用这
    //段数组中的第一个值,当然如
    //果为了避免出现最坏的情况出
    //现,我们可以有 low-high 的
    //随机位置作为设定的中间值。
    a[0]=a[low];
    //这段代码需要自己动手模拟一
    //遍,意思就是上面我已经述说
    //了一遍了,代码自己手动模拟
    //一个即可明白。
    //注意:a[0]是假设的中间值。
    while(low<high){
        while(a[high]>a[0]&&low<high)high--;
        if(low<high)a[low++]=a[high];
        while(a[low]<a[0]&&low<high)low++;
        if(low<high)a[high++]=a[low];
    }
    a[low]=a[0];
    return low;
}
void init()
{
    memset(a,0,sizeof(a));
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        scanf("%d",&a[i]);
}
void my_Quicksort(int low,int high)
{
    //首先利用分而治之的思想将一段数组截
    //成两节
    if(low<high)
    {
        int mid = partition(low,high);//进入一次快排处理
        my_Quicksort(low,mid-1);
        my_Quicksort(mid+1,high);
    }
}
void print()
{
    for(i=1;i<=n;i++)
    {
        printf("%d ",a[i]);
    }
}
int main()
{
    init();
    my_Quicksort(1,n);
    print();
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值