從有序列表的候選區data[0:n]開始,通過對待查詢的值與候選區中間值的比較,可以使候選區減少一半。
示例(使用二分查詢3):
二分查詢**:
def bin_search(data_set, val):列表有n個數,列表每兩個相鄰的數,如果前邊的比後邊的大,那麼交換這兩個數……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-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):優化後的氣泡排序時間複雜度 o(n^2) ,最好的時間複雜度是 o(n) 。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) 。
**如下
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次比...