查詢和排序

2021-08-07 03:23:27 字數 2911 閱讀 4024

二分查詢演算法:

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...