排序 二分查詢

2021-09-18 05:15:48 字數 3485 閱讀 6663

實現歸併排序、快速排序、插入排序、氣泡排序、選擇排序、堆排序**(選做)(完成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 ...