此算法将列表元素一分为二:一部分为小于”基准“元素的列表,一部分为大于”基准“元素的列表;待列表分割后,算法又在每个较小的列表上重复这一过程。
快速排序的实现:
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))。