php--バブル、選択、挿入、高速の4つの基礎ソート
13593 ワード
バブルソート
構想分析:法はその名の通り、泡のように、配列の中から最大の数が出る.
第1ラウンド:最初から最後の泡まで比較し、実行結果:最後の最大
第2ラウンド:最初から最後から2番目のバブル比較、運転結果:最後の最大(現在のホイールの最後)
このように...
ソートの選択
構想分析:対応する要素を選択するたびに、指定した場所に配置します.
≪第1ラウンド|Firstラウンド|emdw≫:第1ビットから最小の要素を選択して第1ビットに配置します(比較して、$pに小さな下付きラベルを保存し、現在の位置の要素と交換します).
第2ラウンド:第2ビットから(第1ビットはすでに最小数)最小の要素を第1ビット(配列全体の第2ビット)に配置します.
順番に類推する...
ソートの挿入
構想解析:ソートする要素を、ソート番号が想定されている配列の指定された場所に挿入します.
1ラウンド目:2番目の要素と1番目の要素を比較し、小さい場合は位置を交換します.
第2ラウンド:第3の要素と第2の要素を比較し、小さい場合は第3の第2の要素の位置を交換します.
交換後の2番目の要素と1番目の要素を比較し、小さい場合は2番目の1番目の要素の位置を交換します.
2輪が下りて、前の3つの要素の大きさはすでに並べて、次の過程は順番に類推して、各輪はそれぞれ前のすべての要素と比較して、前の要素より小さくなければ、動かない;前の要素より小さい場合は、すぐに交換します.
クイックソート
構想分析:最初の要素を参照数にして、それからそれぞれ2つの配列を設定して、参照数より小さいのは左の配列の中に置きます;参照数より大きいものは右の配列に配置します.順番に類推する...(再帰)
1、基準要素を見つけます.
2、配列内の他のすべての要素を比較する.
3、基準要素と比較した結果を大きさによって2つの異なる配列に入れる.
4、配列再帰呼び出し関数自身;
5、並べ替えられた配列を返す(array_merge()
再帰点かいきてん:配列はいち
再帰出口:配列要素が1つ(または空)しかない場合
構想分析:法はその名の通り、泡のように、配列の中から最大の数が出る.
第1ラウンド:最初から最後の泡まで比較し、実行結果:最後の最大
第2ラウンド:最初から最後から2番目のバブル比較、運転結果:最後の最大(現在のホイールの最後)
このように...
$arr=array(1,43,54,62,21,66,32,78,36,76,39);
function getpao($arr)
{
$len=count($arr);
//
//
for($i=1;$i<$len;$i++)
{ //
for($k=0;$k<$len-$i;$k++)
{
if($arr[$k]>$arr[$k+1])
{
$tmp=$arr[$k+1];
$arr[$k+1]=$arr[$k];
$arr[$k]=$tmp;
}
}
}
return $arr;
}
ソートの選択
構想分析:対応する要素を選択するたびに、指定した場所に配置します.
≪第1ラウンド|Firstラウンド|emdw≫:第1ビットから最小の要素を選択して第1ビットに配置します(比較して、$pに小さな下付きラベルを保存し、現在の位置の要素と交換します).
第2ラウンド:第2ビットから(第1ビットはすでに最小数)最小の要素を第1ビット(配列全体の第2ビット)に配置します.
順番に類推する...
function select_sort($arr) {
// , , 。
//$i ,
for($i=0, $len=count($arr); $i<$len-1; $i++) {
//
$p = $i;
//$j ,$i 。
for($j=$i+1; $j<$len; $j++) {
//$arr[$p]
if($arr[$p] > $arr[$j]) {
// , , ; ,
// 。
$p = $j;
}
}
// , $p 。
// $i ,
if($p != $i) {
$tmp = $arr[$p];
$arr[$p] = $arr[$i];
$arr[$i] = $tmp;
}
}
//
return $arr;
}
ソートの挿入
構想解析:ソートする要素を、ソート番号が想定されている配列の指定された場所に挿入します.
1ラウンド目:2番目の要素と1番目の要素を比較し、小さい場合は位置を交換します.
第2ラウンド:第3の要素と第2の要素を比較し、小さい場合は第3の第2の要素の位置を交換します.
交換後の2番目の要素と1番目の要素を比較し、小さい場合は2番目の1番目の要素の位置を交換します.
2輪が下りて、前の3つの要素の大きさはすでに並べて、次の過程は順番に類推して、各輪はそれぞれ前のすべての要素と比較して、前の要素より小さくなければ、動かない;前の要素より小さい場合は、すぐに交換します.
function insert_sort($arr) {
//
//
//
// ,
//
//i , ,
// 2 , ( ),
for($i=1, $len=count($arr); $i<$len; $i++) {
// 。
$tmp = $arr[$i];
//
for($j=$i-1;$j>=0;$j--) {
//$arr[$i];// ; $arr[$j];//
if($tmp < $arr[$j]) {
// ,
//
$arr[$j+1] = $arr[$j];
//
$arr[$j] = $tmp;
} else {
//
// , 。
break;
}
}
}
// 。
//
return $arr;
}
クイックソート
構想分析:最初の要素を参照数にして、それからそれぞれ2つの配列を設定して、参照数より小さいのは左の配列の中に置きます;参照数より大きいものは右の配列に配置します.順番に類推する...(再帰)
1、基準要素を見つけます.
2、配列内の他のすべての要素を比較する.
3、基準要素と比較した結果を大きさによって2つの異なる配列に入れる.
4、配列再帰呼び出し関数自身;
5、並べ替えられた配列を返す(array_merge()
再帰点かいきてん:配列はいち
再帰出口:配列要素が1つ(または空)しかない場合
<?php
//
//
$arr = array(6,3,8,6,4,2,9,5,1);
//
function quick_sort($arr){
//
if(!is_array($arr)) return false;
// : 1
$length = count($arr);
if($length <= 1) return $arr;
//
$left = $right = array();
// for ,
for($i = 1;$i < $length;$i++){
//
if($arr[$i] < $arr[0]){
// ,
$left[] = $arr[$i];
}else{
$right[] = $arr[$i];
}
}
//
$left = quick_sort($left);
$right = quick_sort($right);
//
return array_merge($left,array($arr[0]),$right);
}
echo '<pre>';
//
print_r(quick_sort($arr));