毛老師演算法分析課作業快速排序法

2022-04-11 00:49:43 字數 1482 閱讀 4218

演算法描述:

1.先從數列中取出乙個數作為基準數。

2.分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。

3.再對左右區間重複第二步,直到各區間只有乙個數。

#

-*- coding: utf-8 -*-

#@time : 18-9-18 上午11:00

#@author : guo zhengbing

#@email : [email protected]

import

random

defrandom_int_list(start, stop, length):

start, stop = (int(start), int(stop)) if start <= stop else

(int(stop), int(start))

length = int(abs(length)) if length else

0 random_list =

for i in

range(length):

return

random_list

a = random_int_list(1,1000,15)

#快速法排序

defsub_sort(array,low,high):

key =array[low]

while low while low < high and array[high] >=key:

high -= 1

while low < high and array[high] array[low] =array[high]

low += 1array[high] =array[low]

array[low] =key

return

lowdef

quick_sort(array,low,high):

if low key_index =sub_sort(array,low,high)

quick_sort(array,low,key_index)

quick_sort(array,key_index+1,high)

if__name__ == '

__main__':

array =a

print

(array)

quick_sort(array,0,len(array)-1)

print(array)

結果:

befor: [1000, 681, 230, 182, 424, 855, 699, 957, 312, 901, 933, 360, 657, 109, 67, 755, 993, 871, 801, 561]

later: [67, 109, 182, 230, 312, 360, 424, 561, 657, 681, 699, 755, 801, 855, 871, 901, 933, 957, 993, 1000]

演算法分析課作業

求陣列中最大的最小數之差 法一 temp 58,65,32,100,12,20,87,3,88 temp.sort print temp print temp.pop temp 0 結果 3,12,20,32,58,65,87,88,100 97法二 temp 58,65,32,100,12,20,...

演算法課作業 回溯法

7 2 子集和問題 20分 7 3 馬周遊問題 60分 返回主目錄 圖k 著色問題是乙個著名的np完全問題。給定無向圖g v,e 和正整數k,問可否用k種顏色為v中的每個結點分配一種顏色,使得不會有兩個相鄰結點具有同一種顏色?該問題的乙個具體例項可能會有多個解 乙個解就是一種合法的著色方案 要求計算...

排序演算法 快速排序法

1 無論是冒泡法 堆排序法還是歸併法排序,都是重複找到陣列中剩餘未排序元素的最大或最小值,然後將每次找到的最大或最小值依次放進陣列中就可以得到乙個有序的陣列。快速排序法也與其類似,但不同的是,快速排序是通過任意指定陣列中的乙個元素作為基準,比該元素大的放在右邊,比該元素小的放在左邊,這樣就可以保證指...