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

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

 

算法思想:

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

 

关于分治法

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

 

运用排序

1.分解

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

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

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

 

2.递归求解

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

 

3.组合

递归结束,组合完成。

 

算法代码

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

[cpp]  view plain copy print ?
  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= pivot) j--;  
  10.     If(i
  11.     {  
  12.        array [j]=array[i];//两个数交换  
  13.        i++;//前端索引+1  
  14.     }  
  15.   
  16.     While(i
  17.     If(i
  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

你可能感兴趣的:(算法,C,/,C++算法学习笔记)