首页 > 编程语言 > 详细

---------快排-----表排-----基数排序(桶排序)-----

时间:2016-01-27 16:59:49      阅读:185      评论:0      收藏:0      [点我收藏+]

其思想就是  在  一堆数字里面找一个  枢纽数字   然后将数字分成了两堆      ,   一个大于该数字,一个小于该数字.  然后去递归的治理   最后合并一下就OK了.技术分享

---------------附上一个极为简陋的代码-------------------

//   依然是  递归实现~~~好恶心.
void Quicksort( ElementType A[], int N )
{
    if(N<2) 
         return;
    pivot =  从A[] 中选一个主元;             //主元选择的要恰当.
    将S = { A[] \ pivot }  分成2 个独立子集:     
        A1={a∈S|a<=pivot } 和 和
        A2={a∈S|a>=pivot };
    A[] = Quicksort(A1,N1)
        {pivot}
    Quicksort(A2,N2);
}

在我们去  取主元的话 我们经常是 去    头中尾   这三个数字之中的中位数.

 第一步  筛选主元

ElementType Median3(ElementType A[],int left,int right)
{
    int center=(left+right)/2;
    if(A[left])>A[center])
        swap(A[left},A[center]);
    if(A[left]>A[right])
        swap(A[left],A[Right]);
    if(A[center]>A[right])
        swap(A[center],A[right]);
    swap(A[center],A[right]);       //这样 最后两个数字有序了.
    //只需要考虑 A[left+1]-A[righ-2]  就可以了.
    return A[right-1];
}

 

第二步  子集划分

 

---------快排-----表排-----基数排序(桶排序)-----

原文:http://www.cnblogs.com/A-FM/p/5163735.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!