使用Python完成排序(快排法、归并法)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用Python完成排序(快排法、归并法),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1340字,纯文字阅读大概需要2分钟。
内容图文
class Sort(object):
def quick_sort(self, ls):
self.quick_sort_helper(ls, 0, len(ls) - 1)
return ls
def quick_sort_helper(self, ls, start, end):
if end <= start:
return
pivot_index = random.randint(start, end)
pivot = ls[pivot_index] # pivot value
ls[pivot_index], ls[end] = ls[end], ls[pivot_index] # swap with the value in index end.
boundary = start # boundary is in index start.
for i in range(start, end):
if ls[i] < pivot:
ls[i], ls[boundary] = ls[boundary], ls[i] # swap with the value in index i.
boundary += 1
ls[boundary], ls[end] = ls[end], ls[boundary] # lie the pivot in index boundary.
self.quick_sort_helper(ls, start, boundary - 1)
self.quick_sort_helper(ls, boundary + 1, end)
def merge_sort(self, ls):
buffer = ls[:]
self.merge_sort_helper(ls, buffer, 0, len(ls) - 1)
return ls
def merge_sort_helper(self, ls, buffer, start, end):
if end <= start:
return
middle = (start + end) // 2
self.merge_sort_helper(ls, buffer, start, middle)
self.merge_sort_helper(ls, buffer, middle + 1, end)
i1, i2 = start, middle + 1
for i in range(start, end+1):
if i2 > end:
buffer[i] = ls[i1]
i1 += 1
elif i1 > middle:
buffer[i] = ls[i2]
i2 += 1
elif ls[i1] < ls[i2]:
buffer[i] = ls[i1]
i1 += 1
else:
buffer[i] = ls[i2]
i2 += 1
ls[start:end+1] = buffer[start:end+1]
if __name__ == '__main__':
ls = [1, 9, 5, 4, 3, 7, 6]
s = Sort()
print(s.quick_sort(ls[:]))
print(s.merge_sort(ls[:]))
内容总结
以上是互联网集市为您收集整理的使用Python完成排序(快排法、归并法)全部内容,希望文章能够帮你解决使用Python完成排序(快排法、归并法)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。