實現歸併排序、快速排序、插入排序、氣泡排序、選擇排序、堆排序**(選做)(完成leetcode上的返回滑動視窗中的最大值(239),這是上一期第三天的任務進行保留(涉及佇列可以對第二天進行整理複習))**
程式設計實現 o(n) 時間複雜度內找到一組資料的第 k 大元素
def
insert_sort
(alist)
: n =
len(alist)
for j in
range(1
,n):
# j = [1,2,3, n-1]
i = j
while i>0:
if alist[i]
< alist[i-1]
: alist[i]
, alist[i-1]
= alist[i-1]
, alist[i]
i -=
1else
:break
if __name__ ==
'__main__'
: li =[54
,26,93
,17,77
,31,44
,55,20
]print
(li)
insert_sort(li)
print
(li)
def
bubble_sort
(alist)
: n =
len(alist)
for j in
range
(n-1):
for i in
range
(n-1
-j):
#注意n-1-j 每次遍歷的數都需要比上次少乙個
if alist[i]
> alist[i+1]
: alist[i]
, alist[i+1]
= alist[i+1]
, alist[i]
def
bubble_sort
(alist)
:for j in
range
(len
(alist)-1
,0,-
1):# [n-1, n-2, 1]
for i in
range
(j):
if alist[i]
> alist[i+1]
: alist[i]
, alist[i+1]
= alist[i+1]
, alist[i]
def select_sort(alist):
n = len(alist)
for j in range(n-1):
min_index = j
for i in range(j+1, n):
if alist[min_index] > alist[i]:
min_index = i
alist[j], alist[min_index] = alist[min_index], alist[j]
if __name__ == '__main__':
li = [54,26,93,17,77,31,44,55,20]
print(li)
select_sort(li)
print(li)
def
quick_sort
(alist, start, end)
:"""快速排序"""
# 遞迴的退出條件
if start >= end:
return
# 設定起始元素為要尋找位置的基準元素
mid = alist[start]
# low為序列左邊的由左向右移動的游標
low = start
# high為序列右邊的由右向左移動的游標
high = end
while low < high:
# 如果low與high未重合,high指向的元素不比基準元素小,則high向左移動
while low < high and alist[high]
>= mid:
high -=
1# 將high指向的元素放到low的位置上
alist[low]
= alist[high]
# 如果low與high未重合,low指向的元素比基準元素小,則low向右移動
while low < high and alist[low]
< mid:
low +=
1# 將low指向的元素放到high的位置上
alist[high]
= alist[low]
# 退出迴圈後,low與high重合,此時所指位置為基準元素的正確位置
# 將基準元素放到該位置
alist[low]
= mid
# 對基準元素左邊的子串行進行快速排序
quick_sort(alist, start, low-1)
# 對基準元素右邊的子串行進行快速排序
quick_sort(alist, low+
1, end)
alist =[54
,26,93
,17,77
,31,44
,55,20
]quick_sort(alist,0,
len(alist)-1
)print
(alist)
實現乙個有序陣列的二分查詢演算法
實現模糊二分查詢演算法(比如大於等於給定值的第乙個元素)
def
func
(nums,target)
: l =
len(nums)
start,end =
0,l-
1while startmid =
(start+end)//2
if nums[mid]
==target:
return mid
elif nums[mid]
start=mid+
1else
: end=mid-
1if nums[start]
!= target:
return-1
return start
func([1
,2,3
,4,5
,6,7
,8,9
,10,44
,50,60
,55,56
],9)
sqrt(x) (x 的平方根)
英文版:
中文版:
二分查詢排序
static final int n 15 static void quicksort int arr,int left,int right 快速排序演算法 if ltemp rtemp ltemp if leftx high mid 1 else low mid 1 return 1 未找到 pu...
二分查詢折半查詢排序
在乙個有序的陣列中,折半查詢乙個元素key,如果能找到返回陣列的下表,如果找不到,返回 1。實現如下所示 二分查詢法 author jcm 2016年8月6日 public class binaryserach int flag binarysearch a,19 if flag 1 system....
氣泡排序 二分查詢
include include include using namespace std int bsearch int t,int n,int x 二分查詢 return null inline void swap int a,int b void init int t,int n for int ...