标签:排序 return nums python items mid len range 数据结构
搜索与排序
(一)二分搜素
Binary Search (iterative):
def bi_search_iter(alist, item):
left, right = 0, len(alist) - 1
while left <= right:
mid = (left + right) // 2
if alist[mid] < item:
left = mid + 1
elif alist[mid] > item:
right = mid - 1
else: # alist[mid] = item
return mid
return -1
Binary Search (recursive):
def bi_search_re(num_list, val):
def bi_search(l, h):
# Not found
if l > h:
return -1
# Check mid
mid = (l + h) // 2
if (num_list[mid] == val):
return mid;
elif (num_list[mid] < val):
return bi_search(mid + 1, h)
else:
return bi_search(l, mid - 1)
return bi_search(0, len(num_list))
(二)排序
1. 冒泡排序
稳定的排序
O(n^2)
def _bubble_sort(nums: list):
for i in range(len(nums)-1):
# Get (i+1) largest in the correct position
for j in range(len(nums) - i - 1):
if nums[j] > nums[j + 1]:
nums[j], nums[j + 1] = nums[j + 1], nums[j]
优化:
def bubble_sort_mod(array):
for i in range(len(nums)-1):
is_sorted = True
for j in range(len(nums) - i - 1):
if nums[j] > nums[j + 1]:
nums[j], nums[j + 1] = nums[j + 1], nums[j]
is_sort = False
if is_sorted:break
2. 选择排序
不稳定的排序
O(n^2)
def selection_sort(items):
for i in range(len(items)-1): # n
pos_min = i #idx
for j in range(i + 1, len(items)): # n
if (items[j] < items[pos_min]):
pos_min = j
items[i], items[pos_min] = items[pos_min], items[i]
标签:排序,return,nums,python,items,mid,len,range,数据结构 来源: https://www.cnblogs.com/gdy1993/p/13068778.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。