冒泡排序及快速排序

概述

  冒泡排序法的基本思想:(以升序爲例)含有n個元素的數組原則上要進行n-1次排序。對於每一躺的排序,從第一個數開始,依次比較前一個數與後一個數的大小。如果前一個數比後一個數大,則進行交換。這樣一輪過後,最大的數將會出現稱爲最末位的數組元素。第二輪則去掉最後一個數,對前n-1個數再按照上面的步驟找出最大數,該數將稱爲倒數第二的數組元素……n-1輪過後,就完成了排序。
  快速排序是冒泡排序的一種改進,快速排序由於排序效率在同爲O(N*logN)的幾種排序方法中效率較高,因此經常被採用,再加上快速排序思想—-分治法也確實實用,因此很多軟件公司的筆試面試,包括像騰訊,微軟等知名IT公司都喜歡考這個,還有大大小的程序方面的考試如軟考,考研中也常常出現快速排序的身影。
冒泡排序有點類似與水中的氣泡,越來越大;
快速排序以一個基準值,將無序列分成兩部分(左邊小於基準值,右邊大於基準值),然後遞歸。

理論

http://www.cnblogs.com/hb_cattle/articles/1552419.html
http://blog.csdn.net/morewindows/article/details/6684558

動畫

1.冒泡排序

冒泡排序動畫1
冒泡排序動畫2

2.快速排序

快速排序動畫1
快速排序動畫2

代碼(PHP)

1.冒泡排序

//冒泡排序(O(n2))
function bubbleSort($arr){
    $length = count($arr);
    if($length < 2){
        return $arr;
    }
    for($i=0;$i<$length;$i++){
        $temp = $arr[0];
        for($j=0;$j< $length-$i-1;$j++){
            if($arr[$j] > $arr[$j+1]){
                list($arr[$j],$arr[$j+1])= array($arr[$j+1],$arr[$j]);
            }
        }
    }
    return $arr;
}

2.快速排序

//快速排序
function quickSort(&$arr,$height,$low=0){
    if($height <= $low){
        return $arr;
    }
    $i=$low+1;
    $j= $height;
    $temp = $arr[$low];
    while($i<$j){
        while($i<$j && $arr[$j] > $temp){$j--;}
        while($i<$j && $arr[$i] <= $temp){$i++;}
        list($arr[$i],$arr[$j]) = array($arr[$j],$arr[$i]);
    }
    if($arr[$i] <= $temp){
        list($arr[$low],$arr[$i])=array($arr[$i],$arr[$low]);
    }

    quickSort($arr,$i-1,$low);
    quickSort($arr,$height,$j+1);
    return $arr;
}

3.測試

$item =array('2','1','4','3','8','6','5','-1','10','3','7','6','6');
var_dump(implode(',',$item));
var_dump(implode(',',bubbleSort($item)));
var_dump(implode(',',selectSort($item)));

結果

冒泡,快速排序

發佈了63 篇原創文章 · 獲贊 37 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章