排序算法 - 823126028/book_reader GitHub Wiki
timsort
- timsort 对反序,和基本有序的数据处理较原来的merge sort要快很多(5倍左右)。
- 内部在对小分组情况下进行二分插排 binary_search,在选择小组的时候判断是否有序,有序或者倒序的情况是直接分成一组的。
skip list 跳表:
- 实现简单,性能与堆排序相近,且分段性能好,在并发开发上要优于 堆排序。ConcurrentSkipListMap (java 并发类)
二分插排
- 较为有序的时候比较占优势
快排
- 快排的使用范围是在随机性较强的时候占优势。
``
def do_when_end(array, begin, forward, reverse):
if forward >= reverse:
array[begin], array[forward] = array[forward], array[begin];
return True;
return False;
def find_right_place(array, begin, end):
value = array[begin];
forward = begin;
reverse = end;
while True:
while forward < reverse and value < array[reverse]:
reverse -= 1;
if do_when_end(array, begin, forward, reverse):
return forward;
while forward < reverse and value >= array[forward]:
forward += 1;
if do_when_end(array, begin, forward, reverse):
return forward;
array[forward], array[reverse] = array[reverse], array[forward];
def quick_sort(list,begin,end):
if begin < end:
forward = find_right_place(list, begin, end);
quick_sort(list, begin, forward - 1);
quick_sort(list,forward + 1,end);
if __name__ == "__main__":
list = [1, 6,14,-1,-3,17,100,-9,-29]
quick_sort(list,0,len(list) - 1)
print(list);
``