算法导论7.1-4习题解答(快速排序)

CLRS 7.1-4 :

应如何修改QUICKSORT,才能使其按非增序进行排序?

算法思想:

改掉书上partition算法中的<=为>=

#include < iostream >
using  namespace std;
void quick_sort( int * & a, int p, int r);
int partition( int * & a, int p, int r);
int main()
{
const  int LEN = 20 ;
int b[LEN] = { 12 , 43 , 0 , - 4 , 98 , 75 , 64 , 88 , 5 , 32 , 11 , 12 , 13 , 84 , 34 , 27 , - 5 , - 244 , 49 , 345 };
int * a = new  int [LEN];
for ( int i = 0 ; i < LEN; i ++ )
a[i]
= b[i];
quick_sort(a,
0 , LEN - 1 );
for ( int i = 0 ; i < LEN; i ++ )
cout
<< a[i] << endl;
return 0 ;
}
void quick_sort( int * & a, int p, int r)
{
if (p < r)
{
int q = partition(a, p, r);
quick_sort(a, p, q
- 1 );
quick_sort(a, q
+ 1 , r);
}
}
int partition( int * & a, int p, int r)
{
int j = p;
for ( int i = p; i < r; i ++ )
{
if (a[i] >= a[r])
{
if (i != j)
{
int temp = a[i];
a[i]
= a[j];
a[j]
= temp;
}
j
++ ;
}
}
int ex = a[j];
a[j]
= a[r];
a[r]
= ex;

return j;
}

PS:第七章其他题目都为算法证明题,学的不深,都下不了手。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值