python容器的排序與查詢

2021-10-16 12:31:53 字數 3030 閱讀 7932

容器查詢:要乙個乙個遍歷。

資料結構和演算法:樹,圖,排序、查詢

import builtins

dir(builtins)#檢視異常,全域性函式

( list.sort() 方法只是為列表定義的,而 sorted() 函式可以接受任何可迭代物件。)

ls = [3, 2, 1, 56, 77, 21, 4357, 765, -232, 0, 99]

ls.sort()#公升序排列

#ls.reverse()#倒列表實現降序

print(ls)

``

排序演算法:氣泡排序、選擇排序、插入排序 、

'''

ls富2021/1/18

氣泡排序

'''#公升序(查詢最大次數為列表元素-1次:恰好降序)

def asending_sort(ls):

for i in range(len(ls)):

#在乙個迴圈,進行比較次數

for j in range(len(ls)-i-1):#-1是防止下標越界,由於i增加,比較次數可以減少,增加效率

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

ls[j],ls[j+1]=ls[j+1],ls[j]

print(ls)

if __name__ == '__main__':

ls = [3, 2, 1, 56, 77, 21, 4357, 765, -232, 0, 99]

asending_sort(ls)

降序:

'''

ls富2021/1/18

氣泡排序

'''#公升序(查詢最大次數為列表元素-1次:恰好降序)

def descending_sort(ls):

for i in range(len(ls)):

#在乙個迴圈,進行比較次數

for j in range(len(ls)-i-1):#-1是防止下標越界,由於i增加,比較次數可以減少,增加效率

if ls[j] < ls[j+1]:

ls[j],ls[j+1]=ls[j+1],ls[j]

print(ls)

if __name__ == '__main__':

ls = [3, 2, 1, 56, 77, 21, 4357, 765, -232, 0, 99]

descending_sort(ls)

選擇排序:(每次查詢找到最小值(或最大值)和後面交換:

'''

ls富2021/1/18

選擇排序

'''#公升序(查詢最大次數為列表元素-1次:恰好降序)

def asending_sort(ls):

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

# 記錄最小數的索引

minindex = i

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

if ls[j] < ls[minindex]:

minindex = j

# i 不是最小數時,將 i 和最小數進行交換

if i != minindex:

ls[i], ls[minindex] = ls[minindex], ls[i]

return print(ls)

if __name__ == '__main__':

ls=[22,1423,4,676,7,78,78,124]

asending_sort(ls)

插入排序:(根據開頭二個排序,匯入後面的數,與前面進行比較,找到位置進行插入)

'''

ls富2021/1/18

選擇排序

'''#公升序(查詢最大次數為列表元素-1次:恰好降序)

def asending_sort(ls):

for i in range(len(ls)):

preindex = i-1

current = ls[i]

while preindex >= 0 and ls[preindex] > current:

ls[preindex+1] = ls[preindex]

preindex-=1

ls[preindex+1] = current

return print(ls)

if __name__ == '__main__':

ls=[22,1423,4,676,7,78,78,124]

asending_sort(ls)

查詢:從有序資料中查乙個特殊位置。

查詢方法:二分查詢(折半查詢:保證有序,1,找到中間數(進行比較,選擇一邊),再迴圈上面操作,找到需要元素(元素越多,效率越高))

def binary_search(ls, key):

low = 0

high = len(ls) - 1

time = 0

while low < high:

time += 1

mid = int((low + high) / 2)

if key < lis[mid]:

high = mid - 1

elif key > lis[mid]:

low = mid + 1

else:

# 列印折半的次數

print("times: %s" % time)

return mid

print("times: %s" % time)

return false

if __name__ == '__main__':

ls = [1, 5, 7, 8, 22, 54, 99, 123, 200, 222, 444]

result = binary_search(ls, 99)

print(result)

vector向量容器元素排序與查詢

include include vector vec 比較函式,這裡的元素型別要與vector儲存的型別一致 bool compare int a,int b std sort vec.begin vec.end compare 注意 sort 函式原型申明如下 template void sort...

查詢與排序

分治法求最大連續和 include include using namespace std const int maxn 1e5 5 int a maxn int dfs int x,int y return 1 二分法非遞迴 int main a j 1 t return 插入排序 int mai...

排序與查詢

將要處理的資料都載入到記憶體中進行排序 交換式排序,選擇式排序,插入式排序 資料過大無法全部載入到記憶體中,需借助外部儲存器 合併排序,直接合併排序 略直接找值,一般 index 1,借助index的值確定有沒有找到 推薦 略記憶體存在形式 重點 定義時初始化 var arr3 2 3 int 2 ...