快速排序

此算法将列表元素一分为二:一部分为小于”基准“元素的列表,一部分为大于”基准“元素的列表;待列表分割后,算法又在每个较小的列表上重复这一过程。

快速排序的实现:

1)C++实现

void quick_sort(int* array, int lower, int upper)
{
	int tmp;
	int mid = (upper+lower)/2;
	int pivot = array[mid];
	int tlower = lower;
	int tupper = upper;
	
	while(tlower <= tupper)
	{
		while(array[tlower] < pivot) { tlower++; }
		while(array[tupper] > pivot) { tupper--; };
		if(tlower <= tupper)
		{
			tmp = array[tlower];
			array[tlower] = array[tupper];
			array[tupper] = tmp;
			tlower++;
			tupper--;
		}
	}
	
	if(lower < tupper) { quick_sort(array, lower, tupper); }
	if(tlower < upper) { quick_sort(array, tlower, upper); }
}


2)Python实现

def quick_sort(lists, lower=0, upper=None):
    if lower < 0:
        raise ValueError('lower must be non-negative')
    if lower >= upper:
        raise ValueError('lower must be less than upper')
    if upper is None:
        upper = len(lists)-1

    mid = (lower+upper)//2;
    pivot = lists[mid]
    tlower = lower
    tupper = upper

    while tlower <= tupper:
        while lists[tlower] < pivot: tlower += 1
        while lists[tupper] > pivot: tupper -= 1
        if tlower <= tupper:
            lists[tlower],lists[tupper] = lists[tupper],lists[tlower]
            tlower += 1
            tupper -= 1

    if lower < tupper: quick_sort(lists, lower, tupper)
    if tlower < upper: quick_sort(lists, tlower, upper)

    return lists


lists = [4,6,3,2,4,8,5,10]
quick_sort(lists, 1,3)
print(lists)

快速排序算法的复杂度很难计算。对于一般情况,可证明其复杂度为O(N*log2(N));可用下面的推理加以解释。假设各项均匀分布且每次数组被拆分产生的两部分数量相等。对于一个给定的N,要拆分log2(N)次才能将数组拆分为N个独立元素且排序完成。每次拆分数组时都调用两个函数 ,一个函数对数组的下半部分排序,另一个则对上半部分排序。因此,每次拆分都将对整个数组的N个元素进行迭代。因此,算法的复杂度是O(N*log2(N))。














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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值