分治法-----快速排序

来源:互联网 发布:类似淘宝的小购物网站 编辑:程序博客网 时间:2024/06/04 18:41

1.算法思想

   将待排序列通过一趟扫描分割成独立的三个序列:第一个序列中的所有元素均小于基准元素,第二个序列是基准元素,第三个序列中的所有元素大于基准元素,由于第二序列已出于正确位置,按同样的方法对第一个序列和第三个序列分别进行排序,整个序列过程递归进行,最终实现整个序列有序

2.快速排序的分治法体现

   利用分治法对快速排序的描述: 设待排序列为R[low:high],其中low<=high。用分治法分三步处理:

  1.分解

    在R[low:high]中选一个元素作为基准元素(pivot)该基准元素的位置(pivotpos)在划分的过程中确定,以此基准元素为标准将待排序列划分为两个子序列R[low,pivotpos-1]和R[pivotpos+1,high],并使序列R[low,pivotpos-1]中的所有元素均小于等于R[pivotpos],序列R[pivotpos+1,high]中的所有元素大于等于R[pivotpos],此时基准元素已位于正确位置

  2.求解子问题

   对两个子序列R[low,pivotpos-1]和R[pivotpos+1,high],分别进行递归调用快速排序算法进行排序

  3.合并


3.划分方法

   待排序列为R[low,high],以第一个元素为基准元素

   步骤1:设两个参数i和j,它们的初值分别为待排序列的上界和下界,即i=low,j=high

   步骤2:选取待排序列的第一个元素R[low]作为基准元素,并将该值赋给变量pivot

   步骤3:令j自j位置开始向左扫描,如果j位置所对应的元素的值大于等于pivot。则j--,重复该过程,直到找到第一个小于pivot的元素R[j],将R[j]和R[i]进行交换,i++

   步骤4:令i自i位置开始向右扫描,如果i位置所对应的元素的值小于等于pivot。则i++,重复该过程,直到找到第一个大于pivot的元素R[i],将R[j]和R[i]进行交换,j--

  步骤5:重复步骤3和4,交替改变扫描方向,从两端各自往中间靠拢直至i=j,此时i和j指向同一个位置,即基准元素pivot的最终位置

4.算法实现

  

5.运行结果

 

0 0
原创粉丝点击