#include<iostream>
void prin(int *list,int len)
{
for(int i = 0 ;i< len ;++i)
std::cout<<list[i]<<" "<<std::endl;
}
int partition_1(int *list,int low,int high)
{
int privot = list[low] ;//分割点
while(low < high)
{
while( low < high && list[high] >= privot)//从high处寻找小于privot的值
--high ;//未找到则移动到“下一个”元素
if(low < high)//成功找到小于privot的值,则进行交换
list[low++] = list[high] ;
while(low < high && list[low] <= privot)//从low处寻找大于privot的值
++low ;//未找到则移动到下一个元素
if(low < high)//成功找到大于privot的值,则进行交换
list[high--] = list[low] ;
}
list[low] = privot ;//插入值
return low ;//
}
/************************************************************************/
/*快速排序
* list 数组 ,low 第一元素的位置,high最后一个元素的位置
*/
/************************************************************************/
void quickSort(int *list,int low,int high)
{
int pos ;
if(low< high)
{
pos = partition_1(list,low,high) ;
quickSort(list,low,pos-1) ;
quickSort(list,pos+1,high) ;
}
}
int main()
{
int a[10] = {5,8,2,4,9,0,1,6,7,3} ;
quickSort(a,0,sizeof(a)/sizeof(int)-1) ;
prin(a,sizeof(a)/sizeof(int)) ;
system("pause") ;
return 0 ;
}
第一次
3 1 2 4 0 |5| 9 6 7 8 //5为分割点
第二次
0 1 2 |3| 4 8 6 7 |9 //3,9为分割点
第三次
0 |1 2 7 6 |8 //0,8为分割点
第四次
1| 2 6 | 7 //1 ,7为分割点
算法复习之快速排序
最新推荐文章于 2022-02-28 21:18:51 发布