二分 冒泡 選擇 插入排序

2022-09-06 06:06:11 字數 1709 閱讀 1618

從有序列表的候選區data[0:n]開始,通過對待查詢的值與候選區中間值的比較,可以使候選區減少一半。

示例(使用二分查詢3):

二分查詢**:

def bin_search(data_set, val):

low = 0

high = len(data_set) - 1

while low <= high:

mid = (low+high)//2

if data_set[mid] == val:

return mid

elif data_set[mid]< val:

low = mid + 1

else:

high = mid - 1

列表有n個數,列表每兩個相鄰的數,如果前邊的比後邊的大,那麼交換這兩個數……

一共冒泡n-1趟,第 i 趟交換 n-i-1 次。

時間複雜度 o(n^2) 。

**如下

def bubble_sort(li):

for i in range(len(li) - 1):

for j in range(len(li) - i - 1):

if li[j] > li[j+1]:

li[j], li[j+1] = li[j+1], li[j]

氣泡排序優化:

def bubble_sort_1(li):

for i in range(len(li) - 1):

exchange = false

for j in range(len(li) - i - 1):

if li[j] > li[j+1]:

li[j], li[j+1] = li[j+1], li[j]

exchange = true

if not exchange:

break

優化後的氣泡排序時間複雜度 o(n^2) ,最好的時間複雜度是 o(n) 。

一趟遍歷記錄最小的數,放到第乙個位置;一趟遍歷記錄最小的數,放到第乙個位置;……

時間複雜度 o(n^2) 。

**如下

def select_sort(li):

for i in range(len(li) - 1):

min_loc = i

for j in range(i+1,len(li)):

if li[j] < li[min_loc]:

min_loc = j

li[i], li[min_loc] = li[min_loc], li[i]

列表被分為有序區和無序區兩個部分。最初有序區只有乙個元素。

每次從無序區選擇乙個元素,插入到有序區的位置,直到無序區變空。

時間複雜度 o(n^2) 。

**如下

def insert_sort(li):

for i in range(1, len(li)):

tmp = li[i]

j = i - 1

while j >= 0 and li[j] > tmp:

li[j+1]=li[j]

j = j - 1

li[j + 1] = tmp

氣泡排序,選擇排序,插入排序,快速排序,二分查詢

氣泡排序 相鄰比較 比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大的數。針對所有的元素重複以上的步驟,除了最後乙個。持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。選擇排序 找最小...

冒泡,選擇,插入排序

arr 8,3,1,2,5 定義全域性陣列,用於氣泡排序 arr1 9,6,7,1,4 定義全域性陣列,用於選擇排序 arr2 10,25,7,2,5,1,30,28,21 定義全域性陣列,用於插入排序 temp 0 全域性變數,用於交換數字 氣泡排序 puts 氣泡排序 n begin upto迴...

冒泡 選擇 插入排序

氣泡排序氣泡排序實現記口訣 n個數字來比較外層迴圈n 1,內層迴圈n 1 i public static void main string args for int i 0 ia j 1 第一層 第1次比較 8,7,6,5,4 第2次比較 7,8,6 5,4 第3次比較 7,6,8,5 4 第4次比...