算法复习之快速排序

原创 2015年07月08日 21:29:56
#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为分割点
版权声明:本文为博主原创文章,未经博主允许不得转载。

分治法之快速排序算法理解介绍

分治法之快速排序算法理解介绍
  • qq_26071477
  • qq_26071477
  • 2016年06月11日 21:35
  • 1585

排序算法之快速排序详解(附示例代码)

1.快速排序简介 对于包含n个数的输入数组来说,快速排序是一种最坏情况时间复杂度为O(n的平方)的排序算法.虽然最坏情况时间复杂度很差,但是快速排序通常是实际排序应用中最好的选择.因为他的平...
  • liuxu841911548
  • liuxu841911548
  • 2017年02月10日 15:37
  • 1018

Java实现算法之快速排序

本文参考了:http://blog.csdn.net/morewindows/article/details/6684558 快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因...
  • Rebirth_Love
  • Rebirth_Love
  • 2016年05月08日 14:21
  • 1084

八大排序算法 之 快速排序(填坑法)

排序思想: 1,将第一个数字作为基准数字,将数组分为左右两部分,左边是比它小的数字,右边是比它大的数字; 2,将左部分按照上面的思想再次进行划分成两部分,依次类推; 3,将右部分按照上面的思想再...
  • yxb_yingu
  • yxb_yingu
  • 2016年05月07日 11:36
  • 1030

啊哈算法-----快速排序

上一节的冒泡排序可以说是我们学习第一个真正的排序算法,并且解决了桶排序浪费空间的问题,但在算法的执行效率上却牺牲了很多,它的时间复杂度达到了O(N2)。假如我们的计算机每秒钟可以运行10亿次,那么对1...
  • binyao02123202
  • binyao02123202
  • 2014年02月27日 14:59
  • 4224

算法复习(2) 快速排序

关于快速排序,一般都认为是通常情况下性能最好的,也确实是。因此对其的讨论都是在于如何能够使它更快。因此看一下快排的一般版本和随机版本。//一般版本 int Partition(int* arr, in...
  • alfred0830
  • alfred0830
  • 2015年04月13日 00:24
  • 195

算法复习--快速排序

static void QuickSortAlg(int R[],int low,int heigh){ if(low >= heigh || low
  • Diaoliangwang
  • Diaoliangwang
  • 2014年08月10日 21:29
  • 545

数据结构实验之排序八:快速排序 递归

Time Limit: 1000MS Memory Limit: 65536KB Problem Description 给定N(N≤10^5)个整数,要求用快速排序对数据进行升序排列,注意不得...
  • khn64
  • khn64
  • 2017年02月08日 19:22
  • 188

《算法(第四版)》排序-----快速排序

参考文章:   http://ahalei.blog.51cto.com/4767671/1365285 1.概念 快速排序,听这个名字就能想到它排序速度快,它是一种原地排序(只需要一个很小的辅助...
  • kwang0131
  • kwang0131
  • 2016年04月07日 14:33
  • 2707

快速排序中的分割算法实现

这里介绍快速排序使用到的两种分割算法。 对于快速排序而言,先选定一个枢轴元素,以枢轴元素为基准比枢轴元素小的元素放在枢轴元素的左边,比枢轴元素大的元素放在枢轴元素的右边。这就是一次分割过程。 1,先介...
  • hapjin
  • hapjin
  • 2015年11月11日 19:38
  • 1359
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:算法复习之快速排序
举报原因:
原因补充:

(最多只允许输入30个字)