一、Python排序算法詳解
Python中有許多內置的排序算法,主要包括快速排序、堆排序、歸併排序、希爾排序等。下面以快速排序為例詳解。
function quick_sort($arr) {
$len = count($arr);
if ($len <= 1) {
return $arr;
}
$pivot = $arr[0];
$left_arr = $right_arr = array();
for ($i = 1; $i < $len; $i++) {
if ($arr[$i] < $pivot) {
$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($pivot), $right_arr);
}
二、簡單選擇排序算法(C語言詳解版)
簡單選擇排序是一種簡單直觀的排序算法,通過交換找到最小的元素放到已排好序的序列末尾。
void selection_sort(int a[], int n) {
int i, j, min_idx;
for (i = 0; i < n-1; i++) {
min_idx = i;
for (j = i+1; j < n; j++) {
if (a[j] < a[min_idx]) {
min_idx = j;
}
}
int temp = a[min_idx];
a[min_idx] = a[i];
a[i] = temp;
}
}
三、哈希排序算法詳解
哈希排序算法主要是通過將值的索引映射到特定的桶中,將相似的元素分在同一個桶中,從而實現高效排序。
function hash_sort($arr) {
$max_val = max($arr);
$num_buckets = sqrt(count($arr));
$buckets = array();
for ($i = 0; $i < $num_buckets; $i++) {
$buckets[$i] = array();
}
foreach ($arr as $val) {
$idx = floor($num_buckets * $val / ($max_val + 1));
array_push($buckets[$idx], $val);
}
foreach ($buckets as &$bucket) {
sort($bucket);
}
unset($bucket);
$res = array();
foreach ($buckets as $bucket) {
foreach ($bucket as $val) {
array_push($res, $val);
}
}
return $res;
}
四、歸併排序算法詳解
歸併排序是一種採用分治策略的排序算法,將一個大問題拆分成多個小問題,逐一解決並將子問題的結果合併。
function merge($arr1, $arr2) {
$res = array();
while (count($arr1) && count($arr2)) {
$val1 = $arr1[0];
$val2 = $arr2[0];
if ($val1 < $val2) {
array_push($res, array_shift($arr1));
} else {
array_push($res, array_shift($arr2));
}
}
if (count($arr1)) {
array_splice($res, count($res), 0, $arr1);
}
if (count($arr2)) {
array_splice($res, count($res), 0, $arr2);
}
return $res;
}
function merge_sort($arr) {
$len = count($arr);
if ($len <= 1) {
return $arr;
}
$mid = floor($len / 2);
$left_arr = array_slice($arr, 0, $mid);
$right_arr = array_slice($arr, $mid);
$left_arr = merge_sort($left_arr);
$right_arr = merge_sort($right_arr);
return merge($left_arr, $right_arr);
}
五、選擇排序算法詳解
選擇排序是一種簡單直觀的排序算法,將數組中最小的元素交換到第一個位置,以此類推。
function selection_sort($arr) {
$len = count($arr);
for ($i = 0; $i < $len-1; $i++) {
$min_idx = $i;
for ($j = $i+1; $j < $len; $j++) {
if ($arr[$j] < $arr[$min_idx]) {
$min_idx = $j;
}
}
$temp = $arr[$min_idx];
$arr[$min_idx] = $arr[$i];
$arr[$i] = $temp;
}
return $arr;
}
六、雞尾酒排序算法詳解
雞尾酒排序是改進的冒泡排序算法,從左向右找到最大元素,再從右向左找到最小元素,重複上述過程直到排序完畢。
function cocktail_sort($arr) {
$len = count($arr);
$left = 0;
$right = $len - 1;
while ($left < $right) {
for ($i = $left; $i $arr[$i+1]) {
$temp = $arr[$i];
$arr[$i] = $arr[$i+1];
$arr[$i+1] = $temp;
}
}
$right--;
for ($i = $right; $i > $left; $i--) {
if ($arr[$i] < $arr[$i-1]) {
$temp = $arr[$i];
$arr[$i] = $arr[$i-1];
$arr[$i-1] = $temp;
}
}
$left++;
}
return $arr;
}
七、合併排序算法詳解
合併排序算法是將兩個有序數組合併成一個有序數組,先比較兩個數組的第一個元素,取其中較小的放入合併數組中,將取數的數組指針後移,再次比較兩個數組中的第一個元素,以此類推。
function merge_sort($arr) {
$len = count($arr);
if ($len <= 1) {
return $arr;
}
$mid = floor($len / 2);
$left_arr = array_slice($arr, 0, $mid);
$right_arr = array_slice($arr, $mid);
$left_arr = merge_sort($left_arr);
$right_arr = merge_sort($right_arr);
$merged_arr = array();
$left = 0;
$right = 0;
while ($left < count($left_arr) && $right < count($right_arr)) {
if ($left_arr[$left] < $right_arr[$right]) {
array_push($merged_arr, $left_arr[$left]);
$left++;
} else {
array_push($merged_arr, $right_arr[$right]);
$right++;
}
}
while ($left < count($left_arr)) {
array_push($merged_arr, $left_arr[$left]);
$left++;
}
while ($right < count($right_arr)) {
array_push($merged_arr, $right_arr[$right]);
$right++;
}
return $merged_arr;
}
原創文章,作者:SAZJ,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/139905.html