网站策划的最终体现是什么,响水做网站找哪家好,湖南建设局网站,台州企业建站系统1.冒泡排序 思路#xff1a;遍历列表#xff0c;每一轮每次比较相邻两项#xff0c;将无序的两项交换#xff0c;下一轮遍历比前一轮比较次数减1。 def bubble_sort(a_list):for passnum in range(len(a_list)-1, 0, -1):for i in range(passnum):if a_list[i] a_list… 1.冒泡排序 思路遍历列表每一轮每次比较相邻两项将无序的两项交换下一轮遍历比前一轮比较次数减1。 def bubble_sort(a_list): for passnum in range(len(a_list)-1, 0, -1): for i in range(passnum): if a_list[i] a_list[i1]:a_list[i], a_list[i1] a_list[i1], a_list[i] 改进遍历期间没有交换则认为已排序可以停止。 def short_bubble_sort(a_list):exchanges Truepassnum len(a_list) - 1 while passnum 0 and exchanges:exchanges False for i in range(passnum): if a_list[i] a_list[i1]:exchanges Truea_list[i], a_list[i1] a_list[i1], a_list[i]passnum passnum - 1 动画演示 2.选择排序 思路遍历列表每次遍历选出最大的放在合适的位置。 def selection_sort(a_list): for fillslot in range(len(a_list)-1, 0, -1):position_max0 for location in range(1, fillslot1): if a_list[location] a_list[position_max]:position_max locationa_list[fillslot], a_list[position_max] a_list[position_max], a_list[fillslot] 动画演示 3.插入排序 思路每一步都将待插入的数据按大小插入到已排序的数据中的合适位置。 def insertion_sort(a_list): for index in range(1, len(a_list)):cur_value a_list[index]pos index while pos 0 and a_list[pos-1] cur_value:a_list[pos] a_list[pos-1]pos pos - 1a_list[pos] cur_value 动画演示 4.希尔排序 思路分解为多个子列表进行插入排序不是连续分而是通过增量。 def shell_sort(a_list):sublist_count len(a_list) while sublist_count 0: for start_position in range(sublist_count):gap_insertion_sort(a_list, start_position, sublist_count)sublistcount sublistcount // 2 def gap_insertion_sort(a_list, start, gap): for i in range(startgap, len(a_list), gap):current_value a_list[i]position i while position gap and a_list[position-gap] current_value:a_list[position] a_list[position-gap]position position - gapa_list[position] current_value 5.归并排序 思路分而治之不断拆分为一半直至项数为0或1然后排序合并。需要额外空间。 def merge_sort(a_list): if len(a_list) 1:mid len(a_list) // 2lefthalf a_list[:mid]righthalf a_list[mid:]merge_sort(lefthalf)merge_sort(righthalf)i0j0k0 while i len(lefthalf) and j len(righthalf): if lefthalf[i] righthalf[j]:a_list[k] lefthalf[i]i i 1 else:a_list[k] righthalf[j]j j 1kk1 while i len(lefthalf):a_list[k] lefthalf[i]i i 1k k 1 while j len(righthalf):a_list[k] righthalf[j]j j 1k k 1 动画演示 6.快速排序 思路与归并一样使用分而治之不使用额外内存特点是枢轴值。 def quick_sort(a_list):quick_sort_helper(a_list, 0, len(a_list)-1) def quick_sort_helper(a_list, first, last): if first last:splitpoint partition(a_list, first, last)quick_sort_helper(a_list, first, splitpoint-1)quick_sort_helper(a_list, splitpoint1, last) def partition(a_list, first, last):pivotvalue a_list[first]leftmark first 1rightmark lastdone False while not done: while leftmark rightmark and a_list[leftmark] pivotvalue:leftmark leftmark 1 while a_list[rightmark] pivotvalue and rightmark leftmark:rightmark rightmark -1 if rightmark leftmark:done True else:a_list[leftmark], a_list[rightmark] a_list[rightmark], a_list[leftmark]a_list[first], a_list[rightmark] a_list[rightmark], a_list[first] 动画演示 说明
1.参考https://interactivepython.org/runestone/static/pythonds/SortSearch/toctree.html
2.动画来自https://visualgo.net/en 截图