二分查詢演算法:
def search(list,m):low = 0
high = len(list) - 1
while(low <= high):
mid = (low + high)/2
if(list[mid] > m):
high = mid - 1
elif(list[mid] < m):
low = mid +1
else:
return mid
return -1
氣泡排序:
defbubble_sort
(lists):
count
=len
(lists)
foriin
range(0
,count):
forj
inrange(i
+1,count):
iflists[i
]>
lists[j
]:
lists[i
],lists[j
]=lists[j
],lists[i
] return
lists
直接選擇排序:
基本思想:第1趟,在待排序記錄r1 ~ r[n]中選出最小的記錄,將它與r1交換;第2趟,在待排序記錄r2 ~ r[n]中選出最小的記錄,將它與r2交換;以此類推,第i趟在待排序記錄r[i] ~ r[n]中選出最小的記錄,將它與r[i]交換,使有序序列不斷增長直到全部排序完畢。
defselect_sort
(lists):
# 選擇排序
count
=len
(lists)
foriin
range(0
,count):
min=i
forjin
range(i
+1,count):
iflists
[min
]>
lists[j
]:min=j
lists
[min],
lists[i
]=lists[i
],lists
[min]
return
lists
快樹排序:
def quick_sort(lists, left, right):
# 快速排序
if left >= right:
return lists
key = lists[left]
low = left
high = right
while left < right:
while left < right and lists[right] >= key:
right -= 1
lists[left] = lists[right]
while left < right and lists[left] <= key:
left += 1
lists[right] = lists[left]
lists[right] = key
quick_sort(lists, low, left - 1)
quick_sort(lists, left + 1, high)
return lists
歸併排序是建立在歸併操作上的一種有效的排序演算法,該演算法是採用分治法(divide and conquer)的乙個非常典型的應用。將已有序的子串行合併,得到完全有序的序列;即先使每個子串行有序,再使子串行段間有序。若將兩個有序表合併成乙個有序表,稱為二路歸併。
歸併過程為:比較a[i]和a[j]的大小,若a[i]≤a[j],則將第乙個有序表中的元素a[i]複製到r[k]中,並令i和k分別加上1;否則將第二個有序表中的元素a[j]複製到r[k]中,並令j和k分別加上1,如此迴圈下去,直到其中乙個有序表取完,然後再將另乙個有序表中剩餘的元素複製到r中從下標k到下標t的單元。歸併排序的演算法我們通常用遞迴實現,先把待排序區間[s,t]以中點二分,接著把左邊子區間排序,再把右邊子區間排序,最後把左區間和右區間用一次歸併操作合併成有序的區間[s,t]。
defmerge
(left
,right):
i,j=0,
0 result=[
] while
i<
len(
left
)and
j<
len(
right):
ifleft[i
]<=
right[j
]:
result.(
left[i
])
i+=1
else:
result.(
right[j
])
j+=1
result
+=left[i
:]
result
+=right[j
:]
return
result
defmerge_sort
(lists):
# 歸併排序
iflen
(lists
)<=1:
return
lists
num=
len(
lists)/
2 left
=merge_sort
(lists[:
num])
right
=merge_sort
(lists
[num:]
) return
merge
(left
,right)
排序和查詢
1 氣泡排序 雞尾酒排序 選擇排序 插入排序 快速排序 include 氣泡排序 voidmaopao int a,int n int i,j for i 0 i n 1 i for j 0 j n 1 i j if a j a j 1 swap a,j,j 1 交換兩個數 void swap in...
查詢和排序
題目描述 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。思路 折半查詢。如果a mid 大於a right left ...
查詢和排序
includeint main for i 1 ia j for i 1 i k i return 0 time limit 1 sec memory limit 128 mb hardlevel 0 submit 386 solved 198 submit status web board 輸入n...