快速排序算法(c++)

 

   眼看就要走进社会,开始应聘各大公司了。

   抽空学习了一下排序,听闻遇见这些排序算法的概率是到达80%以上,而且是手写的那种,这不,我也开始弄弄,千万不能载在这个上面,这个估计都是很值钱的答题。

    快速排序算法是基于分治策略的一个排序算法,基本思想是对于输入的数组array[begin:end]按一下三个步骤进行排序:

  1. 分解:以array[begin]为基准元素将array[begin:end]划分为3段array[begin:middle],array[middle],array[middle+1:end],是第一部分的元素小于array[middle],第三部分的元素大于array[middle],下标middle在划分过程中确定。

  2. 递归求解,通过调用递归算法对array[begin:middle]和array[middle+1:end]进行排序。

  3. 合并求解,由于排序是就地进行,所以当array[begin:end]排序好之后,不用执行其他的运算。

实现的算法如下:

 
  
1 #include < iostream >
2   using namespace std;
3
4 int Partition( int * pData, int low, int high)
5 {
6 int i = low;
7 int j = high + 1 ;
8 int temp = pData[low];
9 while ( true ){
10 while (pData[ ++ i] < temp && i < high);
11 while (pData[ -- j] > temp);
12 if (i >= j)
13 break ;
14 if (i < j){
15 int temp = pData[i];
16 pData[i] = pData[j];
17 pData[j] = temp;
18 }
19 }
20 pData[low] = pData[j];
21 pData[j] = temp;
22 return j;
23 }
24
25 int QuickSort( int * pData, int low, int high)
26 {
27 if (low < high)
28 {
29 int tx = Partition(pData,low,high);
30 QuickSort(pData,low,tx - 1 );
31 QuickSort(pData,tx + 1 ,high);
32 }
33 }
34
35 int main()
36 {
37 int pData[ 10 ] = { 7 , 5 , 9 , 3 , 4 , 1 , 8 , 2 , 6 , 10 };
38 for ( int i = 0 ;i < 10 ; ++ i)
39 cout << pData[i] << ' ' ;
40 cout << endl;
41 QuickSort(pData, 0 , 9 );
42 for ( int i = 0 ;i < 10 ; ++ i)
43 cout << pData[i] << ' ' ;
44
45 return 0 ;
46 }
47

可以证明快速排序在平均情况下的时间复杂性是O(nlogn),快速排序时不稳定的排序。

转载于:https://www.cnblogs.com/hstcghost/archive/2010/04/07/1706520.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值