关闭

算法复习之快速排序

标签: 快速排序
183人阅读 评论(0) 收藏 举报
#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为分割点
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:29067次
    • 积分:934
    • 等级:
    • 排名:千里之外
    • 原创:60篇
    • 转载:34篇
    • 译文:0篇
    • 评论:4条
    文章分类
    最新评论