4個常見的排序算法

<?php
class SortData {
	/**
	 * @desc: 冒泡排序(升序)  時間複雜度 O(n的平方)   空間複雜度  O(1)  穩定
	 * @author:dingling
	 * @date:2020/4/30
	*/
	public function bubbleSort($arr){
		$len = count($arr);
		for($i=1;$i<$len;$i++){
			for($j=0;$j<$len-$i;$j++){
				if( $arr[$j] > $arr[$j+1] ){
					$tmp = $arr[$j+1];
					$arr[$j+1] = $arr[$j];
					$arr[$j] = $tmp;
				}
			}
		}
		return $arr;
	}

	/**
         * @desc: 冒泡排序(降序)  時間複雜度 O(n的平方)   空間複雜度  O(1)  穩定
         * @author:dingling
         * @date:2020/4/30
        */
        public function bubbleSort2($arr){
                $len = count($arr);
		for( $i=1; $i<$len; $i++ ){
			for($j=0;$j<$len-$i;$j++){
				if( $arr[$j] < $arr[$j+1] ){
					$tmp = $arr[$j+1];
					$arr[$j+1] = $arr[$j];
					$arr[$j] = $tmp;
				}
			}
		}
		return $arr;
	}
	
	/**
         * @desc: 插入排序   時間複雜度 O(n的平方)   空間複雜度  O(1)  穩定
         * @author:dingling
         * @date:2020/4/30
        */
	public function insertSort($arr){
		$len = count($arr);
		for($i=1;$i<$len;$i++){
			$tmp = $arr[$i];
			for($j=$i-1;$j>=0;$j--){
				if($tmp < $arr[$j]){
					$arr[$j+1] = $arr[$j];
					$arr[$j] = $tmp;
				}else{
					break;
				}
			}
		}
		return $arr;
	}

	/**
         * @desc: 快速排序   時間複雜度 O(nlog2爲底n)   空間複雜度  O(nlog2爲底n)  不穩定
         * @author:dingling
         * @date:2020/4/30
        */
	public function quickSort($arr){
		$len = count($arr);
		if($len <= 1){return $arr;}

		$base_num = $arr[0];
		$left_arr = [];
		$right_arr = [];

		for( $i=1;$i<$len;$i++ ){
			if( $base_num > $arr[$i] ){
				$left_arr[] = $arr[$i];
			}else{
				$right_arr[] = $arr[$i];
			}
		}
		$left_arr = $this->quickSort($left_arr);
		$right_arr = $this->quickSort($right_arr);

		return array_merge($left_arr,[$base_num],$right_arr);
	}

	

	/**
         * @desc: 選擇排序   時間複雜度 O(n的平方)   空間複雜度  O(1)  不穩定
         * @author:dingling
         * @date:2020/4/30
        */
	public function selectSort($arr){
		$len = count($arr);

		for($i=0;$i<$len-1;$i++){
			$p = $i;
			for($j=$i+1;$j<$len;$j++){
				if( $arr[$j] < $arr[$p] ){
					$p = $j;
				}
			}
			if($p != $i){
				$tmp = $arr[$p];
				$arr[$p] = $arr[$i];
				$arr[$i] = $tmp;
			}
		}
		return $arr;
	}
}


$arr = [32,23,54,1,56,32,45,6,8,29];
$obj = new SortData();
$arr2 = $obj->bubbleSort($arr);
var_dump($arr2);
$arr2 = $obj->bubbleSort2($arr);
var_dump($arr2);
$arr2 = $obj->quickSort($arr);
var_dump($arr2);
$arr2 = $obj->insertSort($arr);
var_dump($arr2);
$arr2 = $obj->selectSort($arr);
var_dump($arr2);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章