数据结构和算法学习系列之快速排序的Partition函数一种实现方法

快速排序的Partition函数(也即有的书中叫分割函数、划分函数)一种实现方法
这种方式不同于以往的两个游标从左右两侧交替比较的方法。而是只是从一侧走向另一侧。不失为一种思路
1. 在书中看到快速排序的Partition一种实现方法。最开始颇为不理解。后来画图试数,不得不承认试数是一种好的理解方式。才发现这种Partition实现方法也是用的两个游标即index和small游标。
2. 两个游标是从一个方向开始走的,即一开始都是从左侧开始走,如果index所指向的元素小于pivot枢纽元素的话,index和small游标一起向右走,当index所指向的元素大于或者等于pivot枢纽元素的话,只是index自己向右走,small不动,这样的话index走啊走啊,相当于把大的数都一个一个的跳过去,一直找比pivot小的数。
3. 发现有一个小于pivot枢纽元素的时候,将此元素与small所指向的元素互换,这样就达到了元素小于pivot枢纽元素再数组的左半部分,元素大于或者等于pivot枢纽元素在数组的右半部分。

int Partition(int data[],int length,int start,int end)   
{   
    if(data==NULL || length<=0||start<0 || end>=length)   
     {   
        cout<<"输入数据有误"<<endl;   
        exit(0);   
     }   
     int pivot=RandomInRange(start,end);   
     swapElements(&data[pivot], &data[end]);   
.    int small=start-1;
     for(int index=start;index<end;index++)   
     {   
        //如果index所指向的元素小于pivot枢纽元素的话,index和small游标一起向右走,当index所指向的元素大于或者等于pivot枢纽元素的话,只是index自己向右走,small不动,这样的话index走啊走啊 发现有一个小于pivot枢纽元素的时候,将此元素与small所指向的元素互换
         if(data[index]<data[end])   
        {   
             ++small;   
             if(small != index)   
            {   
                 swapElements (&data[index],&data[small]);   
            }   
.        }   
.     }   
     ++small;   
    //最后把small所指向元素与枢纽元素pivot互换
     swapElements (&data[small],&data[end]);   
.     return small;   
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值