python快速排序介紹例項 Python排序例項

2021-10-11 09:50:10 字數 2082 閱讀 4679

python歸併排序

測試**如下↓

defguibing(list1):

n=len(list1)print(list1)if n == 1:returnlist1

half= n // 2left_res=guibing(list1[:half])

right_res=guibing(list1[half:])returnmergersort(left_res, right_res)defmergersort(a, b):

c=llen=len(a)

rlen=len(b)

h=0j=0while j < llen and h

j+= 1

else:

h+= 1

if j == len(a): #這裡不能簡單比較a、b長度

for i inb[h:]:

list1= [7, 9, 3, 4, 5, 8]print(guibing(list1))#print (list1)

f5執行程式,排序正常,注意這裡不能再列印傳入的list,因為返回的是新列表

python快速排序演算法例項分析

快速排序的時間複雜度是o(nlogn)

演算法描述:

① 先從序列中取出乙個數作為基準數

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

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

假設對 6, 1, 2, 7, 9, 3, 4, 5, 10, 8 進行排序, 首先在這個序列中隨便找乙個基準數(用來參照), 比如選擇 6 為基準數, 接下來把所有比基準數大的數放在6的右邊, 比6小的數放在左邊

原理分析:

① 選擇最左邊的數為基準數key

② 設立兩個游標 low 和 high , 分別指向陣列的最低位和最高位

③ 然後high先動, 如果high位上的數比key大, 則向前走, 如果high-1位上的數比key大, 繼續向前走, 直到該位上的數<=key

④ 此時比較low位, 如果<=key, low向後走, 變為low+1, 依次類推, 直到該位上的數比key大

⑤ 交換high和low位上的數

⑥ 重複以上步驟, 直到low=high , 交換 key 和 high 位上的值

⑦ 最後進行遞迴操作

**如下

#!/usr/bin/env python

# coding:utf-8

# 設定最低位和最高位

def quicksort(nums, low, high):

# 設定乙個比較基準key

key = nums[low]

while low

# 如果最高位的數 大於等於 key則向前走

while low= key:

high -= 1

# 如果最低位的數 小於等於 key則向後走

while low

low += 1

# 交換值

nums[low], nums[high] = nums[high], nums[low]

#最後low=high, 此時交換key和high位上的值, 使小於key的值在key左邊, 大的在key右邊

nums[nums.index(key)], nums[low] = nums[low], nums[nums.index(key)]

# 返回最低位的位置

return low

# 進行重複操作

def interval(nums, low, high):

if low

# 進行排序並得到最低位位置以迴圈操作

key_index = quicksort(nums, low, high)

interval(nums, low, key_index)

interval(nums, key_index+1, high)

nums = [64,3,9,2,4,7,0,12,45,]

interval(nums, 0, len(nums)-1)

print ("測試結果:")

print (nums)

#[0, 2, 3, 4, 7, 9, 12, 45, 64]

快速排序例項

include stdafx.h include define cutoff 3 int array void insert sort int array,int size array j temp print array array,size void print array int array,...

快速排序例項

快速排序是根據待排序陣列中的某一值val,將待排序陣列分割成兩部分資料,前一部分陣列比val小 後一部分陣列比val大,之後對每部分資料重複上述過程,最終實現待排序陣列的有序性,例項如下 public class quicksortmain 切分待排序陣列 param arr param low p...

快速排序例項

void sort int a,int left,int right int i left int j right int key a left while i a i a j 找到乙個這樣的數後就把它賦給前面的被拿走的我的值 如果第一次迴圈且鍵是 乙個 左 那麼就是給金鑰 while i a i ...