#!/usr/bin/python
#coding=utf-8
def partition(li,left,rigth):
temp = li[left] #獲取第乙個值假定為列表的中間值
while left < rigth: # 如果中間值的左邊小於右邊 則說明比較的值左邊為空 則將值復還結束演算法
while left < rigth and temp <= li[rigth]: #從列表結尾開始迴圈比較右邊的值
rigth -= 1 #依次向左進一步
li[left] = li[rigth] #將找到的值直接寫到列表最開始(左邊) 因為temp <= li[rigth] 所以會出現 兩個值相當的情況
while left < rigth and temp >= li[left]:#從列表開頭開始迴圈比較左邊的值
left +=1 #依次向右進一步
li[rigth]=li[left] #將找到的值直接寫到列表最開始(右邊) 因為temp >= li[left] 所以會出現 兩個值相當的情況
li[left] = temp
return left
def quick_sort(li,left,rigth):#快速排序利用將列表分為左右兩邊的方式,分別進行遞迴比較排序
if left < rigth:
mid = partition(li,left,rigth) #獲取中間的值
quick_sort(li,left,mid-1) #迴圈呼叫 開始遞迴左邊
quick_sort(li,mid+1,rigth) #迴圈呼叫 開始遞迴右邊
# 時間複雜度 最優情況為o(nlogn) 最壞情況為o(n^2) 如果第一次取得的值正好是最大或者最小的 那麼會出現o(n^2) 解決辦法是可以使用隨機取第乙個值的方法進行改進,不過只是將最壞情況的概率減小了,並不能解決此問題
li = [5,7,4,6,3,1,2,9,8];
if __name__ == "__main__":
quick_sort(li,0,len(li)-1)
print li
________________________________
# php快速排序 因為python操作的是陣列的位址 而php在傳值的時候是把當前的值複製乙份,因為遞迴是無法直接返回的,只能操作位址,所以這裡需要傳入陣列位址
________________________________
//快速排序
function partition(&$li,$left,$right)
$li[$left] = $li[$right];
//var_dump($li);echo "
"; //echo $li[$left];exit;
while ($left < $right && $li[$left] <= $temp)
$li[$right] = $li[$left];
//var_dump($li);echo "
";
} $li[$left] = $temp;
return $left;
//$mid = round(count($li)/2);
//return $temp;
}function quick_sort(&$li,$left,$right)
}$li = [5,7,4,6,3,1,2,9,8];
$right = count($li)-1;
quick_sort($li,0,$right);
var_dump($li);
python php 氣泡排序
usr bin python coding utf 8 def bubble sort li 迴圈列表每次拿出乙個值,和列表中所有的值進行比較之後然後切換位置 for i in range len li 1 躺數迴圈 最後乙個數不用比較 已經是最大或者最小的數 所以躺數減少1 exchange fa...
遞迴 快速排序 快速排序
問題描述 用遞迴來實現快速排序 quick sort 演算法。快速排序演算法的基本思路是 假設要對乙個陣列a進行排序,且a 0 x。首先對陣列中的元素進行調整,使x放在正確的位置上。同時,所有比x小的數都位於它的左邊,所有比x大的數都位於它的右邊。然後對於左 右兩段區域,遞迴地呼叫快速排序演算法來進...
python php 網路程式設計 位元組序轉換
1.python寫法 import socket def convert integer data 1234 32 bit print original s long host byte order s,network byte order s data,socket.ntohl data sock...