首頁  >  文章  >  後端開發  >  PHP實作常見排序演算法

PHP實作常見排序演算法

WBOY
WBOY原創
2016-08-08 09:32:171092瀏覽

插入排序(Insertion Sort):每次將一個待排序的記錄,按其關鍵字大小插入到前面已經排序好的子文件中的適當位置,直到全部記錄插入完成為止。

//插入排序(一维数组)
function insert_sort($arr)
{
	$count = count($arr);
	for($i=1; $i<$count; $i++)
	{
		$tmp = $arr[$i];
		$j = $i - 1;
		while($arr[$j] > $tmp)
		{
			$arr[$i] = $arr[$j];
			$arr[$j] = $tmp;
			$j--;
		}
	}
	return $arr;
}

選擇排序(Selection Sort):每次從待排序的記錄中選出關鍵字最小的記錄,順序放在已排好序的子檔案的最後,直到全部記錄排序完畢。

//选择排序(一维数组)
function selection_sort($arr)
{
	$count = count($arr);
	for($i=0; $i<$count; $i++)
	{
		$k = $i;
		for($j=$i+1; $j<$count; $j++)
		{
			if($arr[$k] > $arr[$j])
			{
				$k = $j;
			}

			if($k != $i)
			{
				$tmp = $arr[$i];
				$arr[$i] = $arr[$k];
				$arr[$k] = $tmp;
			}
		}
	}
	return $arr;
}

冒泡排序(Bubble Sort):兩兩比較待排序記錄的關鍵字,發現兩個記錄的次序相反時即進行交換,直到沒有反序記錄位置。

//冒泡排序(一维数组)
//实际效果是:每次循环将数组中最小的值放置到数组的最前段,然后,下一次循环不再循环已放置正确数组值的键,以此类推
 function selection_sort($arr)
{
	$count = count($arr);
	if($count <= 0)
		return false;
	for($i=0; $i<$count; $i++)
	{
		for($j=$count-1; $j>$i; $j--)
		{
			if($arr[$j] < $array[$j-1])
			{
				$tmp = $arr[$j];
				$arr[$j] = $arr[$j-1];
				$arr[$j-1] = $tmp;
			}
		}
	}
	return $arr;
}

快速排序:實質上和冒泡排序一樣,是屬於交換排序的一種應用。

//快速排序(一维数组)
function quick_sort($arr)
{
	$count = count($arr);
	if($count <= 1)
		return $arr;
	$key = $arr[0];
	$left_arr = array();
	$right_arr = array();
	for($i=1; $i<$count; $i++)
	{
		if($arr[$i] <= $key)
			$left_arr[] = $arr[$i];
		else
			$right_arr[] = $arr[$i];
	}
	$left_arr = quick_sort($left_arr);
	$right_arr = quick_sort($right_arr);

	return array_merge($left_arr,array($arr), $right_arr);
}

以上就介紹了PHP實作常見排序演算法,包含了方面的內容,希望對PHP教學有興趣的朋友有幫助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn