C / C++算法学习笔记(1)-快速排序算法

本文原始地址:C / C++算法学习笔记(1)-快速排序算法

 

算法思想:

快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。

 

关于分治法

基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。

 

运用排序

1.分解

已知一个无序的数组a,以其中任意一个元素作为基准(key)(一般取两端的元素)。

第一次分解:从数组末端(索引j)开始,如果遇到比key小的元素,key和a[j]交换,j前移,再从数组前端遍历,遇到比基准大的元素(如果I<J),调换两个数的位置(key和a[i]交换),前端后移,继续下轮循环(分解)。

每一次分解后,分解所取的基准都会位于正确位置(以基准为中心,左边是小于基准的数,右边是大于基准的数-限每次分解的区域)。

 

2.递归求解

递归进行1所示的分解,每次分解都是在上次基准两侧进行(基准-1/基准+1),直到所有递归执行完。

 

3.组合

递归结束,组合完成。

 

算法代码

这里把第一个元素作为基准

  1. Void QuickSort(int *array,int left,int right)  
  2. {  
  3.     If(left< right)//递归结束条件  
  4.     {  
  5.        Int I,j;  
  6.        Int pivot= array[i];//基准点取本次分解第一个元素  
  7.         While(i< j)  
  8.       {  
  9.          While(i<j && array[j]>= pivot) j--;  
  10.     If(i<j)  
  11.     {  
  12.        array [j]=array[i];//两个数交换  
  13.        i++;//前端索引+1  
  14.     }  
  15.   
  16.     While(i<j && array[i]<= pivot) i++;  
  17.     If(i<j)  
  18.     {  
  19.        array [j]=array[i];//两个数交换  
  20.         j--;//后端索引-1  
  21.     }  
  22.       }  
  23.     Array[i] =pivot;//基准点归位  
  24.     QuickSort(int *array,left,i-1);//左右两边继续分解  
  25.     QuickSort(int *array,i+1, right);  
  26.     }  
  27. }  


 

 

 

算法视频:第1节:算法:快速排序

本文链接:http://student.zjzk.cn/course_ware/data_structure/web/paixu/paixu8.3.2.1.htm

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值