数据结构和算法学习系列之快速排序的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<<"输入数据有误"<exit(0);   
     }   
     int pivot=RandomInRange(start,end);   
     swapElements(&data[pivot], &data[end]);   
.    int small=start-1;
     for(int index=start;indexindex++)   
     {   
        //如果index所指向的元素小于pivot枢纽元素的话,index和small游标一起向右走,当index所指向的元素大于或者等于pivot枢纽元素的话,只是index自己向右走,small不动,这样的话index走啊走啊 发现有一个小于pivot枢纽元素的时候,将此元素与small所指向的元素互换
         if(data[index]if(small != index)   
            {   
                 swapElements (&data[index],&data[small]);   
            }   
.        }   
.     }   
     ++small;   
    //最后把small所指向元素与枢纽元素pivot互换
     swapElements (&data[small],&data[end]);   
.     return small;   
}

你可能感兴趣的:(数据结构)