生活随笔
收集整理的這篇文章主要介紹了
数据结构(5)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 各種算法
- 選擇排序
- 插入排序
- 希爾排序
- ***快速排序***
- 歸并排序
- 二分查找
各種算法
def bubble_sort(alist):"""冒泡排序"""n = len(alist)for j in range(n-1):count = 0for i in range(0, n-1-j):# 班長從頭走到尾if alist[i] > alist[i+1]:alist[i],alist[i+1] = alist[i+1], alist[i]count += 1if 0 == count:return
選擇排序
def select_sort(alist):"""選擇排序"""n = len(alist)for j in range(n-1): # j: 0 ~ n-2min_index = jfor i in range(j+1, n):if alist[min_index] > alist[i]:min_index = ialist[j], alist[min_index] = alist[min_index], alist[j]
插入排序
def insert_sort(alist):"""插入排序"""n = len(alist)# 從右邊的無序序列中取出多少個(gè)元素執(zhí)行這樣的過程for j in range(1, n):# j = [1, 2, 3, n-1]# i 代表內(nèi)層循環(huán)起始值i = j# 執(zhí)行從右邊的無序序列中取出第一個(gè)元素,即i位置的元素,然后將其插入到前面的正確位置中while i > 0:if alist[i] < alist[i-1]:alist[i], alist[i-1] = alist[i-1], alist[i]i -= 1else:break
希爾排序
ef shell_sort(alist):"""希爾排序"""# n=9n = len(alist)# gap =4gap = n // 2# i = gap# for i in range(gap, n):# # i = [gap, gap+1, gap+2, gap+3... n-1]# while:# if alist[i] < alist[i-gap]:# alist[i], alist[i-gap] = alist[i-gap], alist[i]# gap變化到0之前,插入算法執(zhí)行的次數(shù)while gap > 0:# 插入算法,與普通的插入算法的區(qū)別就是gap步長for j in range(gap, n):# j = [gap, gap+1, gap+2, gap+3, ..., n-1]i = jwhile i > 0:if alist[i] < alist[i-gap]:alist[i], alist[i-gap] = alist[i-gap], alist[i]i -= gapelse:break# 縮短gap步長gap //= 2
快速排序
def quick_sort(alist, first, last):"""快速排序"""if first >= last:returnmid_value = alist[first]low = firsthigh = lastwhile low < high:# high 左移while low < high and alist[high] >= mid_value:high -= 1alist[low] = alist[high]while low <high and alist[low] < mid_value:low += 1alist[high] = alist[low]# 從循環(huán)退出時(shí),low==highalist[low] = mid_value# 對low左邊的列表執(zhí)行快速排序quick_sort(alist, first, low-1)# 對low右邊的列表排序quick_sort(alist, low+1, last)
歸并排序
def merge_sort(alist):"""歸并排序"""n = len(alist)if n <= 1:return alistmid = n//2# left 采用歸并排序后形成的有序的新的列表left_li = merge_sort(alist[:mid])# right 采用歸并排序后形成的有序的新的列表right_li = merge_sort(alist[mid:])# 將兩個(gè)有序的子序列合并為一個(gè)新的整體# merge(left, right)left_pointer, right_pointer = 0, 0result = []while left_pointer < len(left_li) and right_pointer < len(right_li):if left_li[left_pointer] <= right_li[right_pointer]:result.append(left_li[left_pointer])left_pointer += 1else:result.append(right_li[right_pointer])right_pointer += 1result += left_li[left_pointer:]result += right_li[right_pointer:]return result
二分查找
def binary_search(alist, item):"""二分查找,遞歸"""n = len(alist)if n > 0:mid = n//2if alist[mid] == item:return Trueelif item < alist[mid]:return binary_search(alist[:mid], item)else:return binary_search(alist[mid+1:], item)return Falsedef binary_search_2(alist, item):"""二分查找, 非遞歸"""n = len(alist)first = 0last = n-1while first <= last:mid = (first + last)//2if alist[mid] == item:return Trueelif item < alist[mid]:last = mid - 1else:first = mid + 1return False
總結(jié)
以上是生活随笔為你收集整理的数据结构(5)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。