冒泡,二分法插入,快速排序演算法

2021-06-14 13:09:57 字數 2009 閱讀 1348

1.氣泡排序演算法

過程:

1.遍歷整個陣列,每兩兩相鄰的元素進行比較,如$a[$i]>$a[$i+1]則互換位置,每次比較消除乙個逆序。

2.每一次迴圈後,下次再需要迴圈的次數減少1。

<?php

// 氣泡排序

$arr = createarr(20);

printarr($arr);

popsort($arr);

printarr($arr);

function createarr($num=10)

return $arr;

}function printarr($arr)

function popsort(&$arr)

}}

}?>

2.二分法插入排序

過程:

1.首先,原陣列是乙個有序序列,$low=0 $high=count($arr)-1。

2.將要插入的數與陣列中間位置的元素進行比較,

如果比中間元素大,則$low=$mid+1作為下一次判斷的陣列開頭。

如果比中間元素小,則$high=$mid-1作為下一次判斷的陣列結尾。

3.直到$low>$high結束,$low就是新元素插入的位置。

4.將陣列中從$low開始的元素全部向後移動一位,之後在$low位置插入新元素。 

<?php

// 二分法插入排序

$arr = createarr(20);

$key = mt_rand(0,99);

printarr($arr);

echo 'key='.$key.'

';binsort($arr, $key);

printarr($arr);

function createarr($num=10)

sort($arr); // 有序序列

return $arr;

}function printarr($arr)

function binsort(&$arr, $key)else

}// 移動插入位置之後的元素,插入新元素

for($i=count($arr)-1; $i>=$low; $i--)

$arr[$low] = $key;

}?>

3.快速排序

過程:

1. 在陣列中找乙個元素作為key,一般取陣列第乙個元素作為key 

2. i=0, j=陣列長度-1 

3. j-- 當 arr[j]key, arr[i]與arr[j]交換位置 

5. 重複3,4 直到 i==j 時,完成。 

6. 將key分隔的左右兩組元素再分別執行 1,2,3,4,5 (遞迴)。

<?php

// 快速排序

$arr = createarr(20);

printarr($arr);

quicksort($arr, 0, count($arr)-1);

printarr($arr);

function createarr($num=10)

return $arr;

}function printarr($arr)

function quicksort(&$arr, $low, $high)

$key = $arr[$low];

$i = $low;

$j = $high;

$flag = 1;

while($i!=$j)else

break;

case 1:

if($arr[$j]<$key)else

break;}}

quicksort($arr, $low, $i-1);

quicksort($arr, $i+1, $high);

}?>

氣泡排序 二分法

核心 掐頭去尾取中間.一次砍一半 二分查詢.每次能夠排除掉一半的資料.查詢的效率非常高.但是侷限性比較大.必須是有 序序列才可以使用二分查詢 兩種演算法 常規迴圈,遞迴迴圈 使用二分法可以提高效率,前提條件 有序序列 lst 22,33,44,55,66,77,88,99,101 238 345 4...

快速排序,二分法排序,插入排序演算法

include include include using namespace std int a 7 定義全域性變數,這兩個變數需要在子函式中使用 void quicksort int left,int right 最終將基準數歸位 a left a i a i temp quicksort le...

二分法快速排序

我在實現二分法快速排序的時候,最初的程式是這樣的。include using namespace std void qsort int arr,int left,int right while l r arr l value l if arr l value while l r arr l valu...