您的位置:首页 > 其它

算法 -- 快速排序

2015-11-30 22:01 239 查看
引言:

排序算法很久没有些过啦,前段时间写了最基础的选择排序和冒泡排序,当时写它们就是为了找感觉.于是今天复习了快速排序的算法.

算法思想:

其实它的思想也很简单:

1.自己确定一个标志数key作为比较对象.

2.从最后一个开始,寻找第一个小于key的,并将其放在当前first上.

3.从第一个开始,寻找第一个大于key的,并将其放在当前last上.

4.如果first仍然小于last,继续执行2,3步骤;否则跳出循环,将key放在first上.

5.以key作为分界线,对两部分进行递归处理即可.

代码如下:

/*************************************************************************
**     >  Name : QSort.cpp
**     > Author: LiYingXiao (Sweethreart502)
**     >  Mail : liyingxiao502@gmail.com
**     >  Blog : http://blog.csdn.net/u013166575 **     > Created Time: 2015年11月30日 星期一 20时50分59秒
************************************************************************/

#include <iostream>

#define N 5

void QSort ( int a[] , int low , int high )
{
// 首先检查参数合法性
if ( low >= high ) {
return ;
}

int first = low , last = high ;
// 以第一个为基准
int key = a[low] ;

while ( first < last ) {
// 后面的与key比较,如果小于key,则更换first值;反之last减一
while ( first < last && a[last] >= key ) {
last-- ;
}
a[first] = a[last] ;

// 前面的与key比较,如果大于key,则更换last值;反之first加一
while ( first < last && a[first] <= key ) {
first++ ;
}
a[last] = a[first] ;
}

// 循环结束,将key值存储在当前first/last所在位置
a[first] = key ;
// 接下来继续递归调用
QSort ( a , low , first - 1 ) ;
QSort ( a , first + 1 , high ) ;
}

// 主函数
int main ( int argc , char * argv[] )
{
int a[] = { 12 , 13 , 21 , 15 , 32 } ;

// 排序前输出
std::cout << "before of the Sort :" << std::endl ;
for ( int i = 0 ; i < N ; i++ ) {
std::cout << a[i] << " " ;
}
std::cout << std::endl ;

QSort ( a , 0 , N - 1 ) ;

// 排序后输出
std::cout << "after of the Sort :" << std::endl ;
for ( int i = 0 ; i < N ; i++ ) {
std::cout << a[i] << " " ;
}
std::cout << std::endl ;

return 0 ;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: