快速排序的递归写法

//*****************************快速排序(递归)****************************
//递归思想:单趟来说,begin找比key大的,end找比key小的,当各自都找到的时候,
//          若begin比end小,则交换两个数据,然后继续找,当再找到的时候,如果
//          begin比end大,则比较a[begin]和key的值,若a[begin]大于key,说明
//          a[begin]的位置应该是key的位置,则交换,然后以key左边和右边分别进
//          行相同操作,否则,key的位置不变

int PartSort( int * a , int left , int right )
{
                 int key = a [ right ];
                 int begin = left ;
                 int end = right - 1;
                 while (begin < end)
                {
                                 while (begin < end&& a [begin] <= key)
                                                ++begin;
                                 while (begin < end&& a [end] >= key)
                                                --end;
                                 if (begin < end)
                                {
                                                swap( a [begin], a [end]);
                                }
                }
                 if ( a [begin]> a [ right ])
                {
                                swap( a [begin], a [ right ]);
                                 return begin;
                }
                 else
                                 return right ;
}

void QuickSort( int * a , int left , int right )
{
                 assert ( a );
                 if ( left >= right )
                                 return ;
                 int mid = PartSort( a , left , right );

                QuickSort( a , left , mid - 1);
                QuickSort( a , mid + 1, right );
}

void QuickSortTest()
{
                    //int arr[] = { 2, 0, 4, 9, 3, 6, 8, 7, 1, 5 };
                    int arr[] = { 2, 5, 4, 9, 3, 5, 8, 7, 1, 5 };
                                 int _size = sizeof (arr) / sizeof (arr[0]);
                                QuickSort(arr, 0, _size - 1);
                                Print(arr, _size);
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值