#!/usr/bin/python
#coding=UTF-8
def bubble_sort(li): #循环列表每次拿出一个值,和列表中所有的值进行比较之后然后切换位置
for i in range(len(li)-1): #躺数循环 最后一个数不用比较 已经是最大或者最小的数 所以躺数减少1
exchange = False #增加标识 以减少循环次数
for j in range(len(li)-i-1): # len(li)-i 表示列表中剩下的无序的列表。每比较一次 则剩下的列表长度减少i。无序列表躺数
if li[j] > li[j+1]: #第一个数和第二个进行比较 如果第一个数大于第二个数就进行交换(升序)
# if li[j] < li[j+1]: 第一个数小于第二个数就进行交换(降序)
li[j],li[j+1] = li[j+1],li[j]
exchange = True # 如果发生交换,那么证明列表中还是有需要进行比较 即无序状态
#print li
if not exchange: #如果没有发生改变,那么已经排序完毕,结束循环(对于不是非常混乱的列表,可以减少循环次数,节省时间,结束算法即可)
return li
#冒泡排序 在为改进之前的时间复杂度是 O(n^2) 在改进之后【exchange = False #增加标识 以减少循环次数】最优情况为O(n)
li = [1,0,3,4,2,9,7,8,5]
print li
if __name__ == "__main__":
print bubble_sort(li)
_________
//冒泡排序 php
function bubble_sort($li)
{
$li_lenght = count($li)-1;
for ($i=0; $i < $li_lenght; $i++) {
$exchange = False ;
for ($j=0; $j < $li_lenght - $i; $j++) {
if ($li[$j] > $li[$j+1]) {
$temp = $li[$j];
$li[$j] = $li[$j+1];
$li[$j+1] = $temp;
$exchange = True;
}
}
if (!$exchange) {
return $li;
}
}
}
$li = [1,0,3,4,2,9,7,8,5];
//$li = [1,2,3,4,5,6,7,8,9];
//echo search($li,10);
//echo binary_search($li,9);
var_dump( bubble_sort($li));