码迷,mamicode.com
首页 > 编程语言 > 详细

【学习记录】关于自定义函数快速排序的那些事。。。

时间:2016-07-31 14:22:22      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:

。。。前几天老妈又批我了,啊哈算法还没看完。。。

于是不甘落后的我开始努力看书。。。虽然我看了很多了。。。

从头开始!!!

 

1.自定义函数快速排序

如果一提起排序,你还想得是一下2行东西,那你就out了

#include<algorithm>
sort(a,a+n);

 

这个效率虽然很高,但人外有人,天外有天,肯定有比这个更快的,那就是---快速排序

看着这个过程很像二分。。。

我们先给一列数:6 1 2 7 9 3 4 5 10 8

进行排序。

我们先将6作为基准数,将比6小的数“扔”到它的左边,比6大的数“扔”到它的右边。

就成这样了。。。

3 1 2 5 4 6 9 7 10 8

然后递归,每次将第1个数作为基准数,一次排序。

下面是代码实现(有注释哦)

#include<iostream>
using namespace std;
int a[100000];
void Qsort(int left ,int right)
{
    if(left>right)return ;
    int temp=a[left];//注意啦!这个很重要!temp中存的就是基准数
    int i=left,j=right;
    while(i!=j)
    {
        //注意,这里顺序很重要,要从右边往左边找
        while(a[j]>=temp && i<j) j--;
        //这是比基准数大的元素都归位了,开始找比基准数小的元素
        while(a[i]<=temp && i<j) i++;
        if(i<j) swap(a[i],a[j]);//如果i,j没有遇上,交换
    }
    //注意:不要忘掉把基准数归位
    a[left]=a[i];
    a[i]=temp;
    Qsort(left,i-1);//处理左边的元素,递归 
    Qsort(i+1,right);//处理右边的元素,递归 
    return ;
}
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;i++)scanf("%d",&a[i]);
    Qsort(0,n-1);
    for(int i=0;i<n;i++)printf("%d ",a[i]);
    return 0;
}

还会有后面的讲解哦,欢迎关注

【学习记录】关于自定义函数快速排序的那些事。。。

标签:

原文地址:http://www.cnblogs.com/ysmor/p/5722815.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!