冒泡排序、快速排序、插入排序学习

mac2025-09-23  24

冒泡排序

<?php // 冒泡排序,将数组内每个元素和所有元素对比,如果顺序错误就交换,最终排列好所有元素。 function bubble($array) { $len = count($array); for ($i=0; $i < $len; $i++) { for ($j=$i+1; $j < $len; $j++) { if ($array[$i] > $array[$j]) { $temp = $array[$j]; $array[$j] = $array[$i]; $array[$i] = $temp; } } } return $array; } $array = [2,1,5,767,8,3,1,0]; print_r(bubble($array));

快速排序

<?php // 快速排序,使用第一个元素作为分隔符,比分隔符小的在左,大的在右,通过对左右数据递归运算,最终得到排列好的序列。 function quick($array) { $len = count($array); if ($len <= 1) { return $array; } $middle = $array[0]; $left = []; $right = []; for($i = 1; $i<$len; $i++) { if ($array[$i] < $middle) { array_push($left, $array[$i]); } else { array_push($right, $array[$i]); } } $left = quick($left); $right = quick($right); return array_merge($left, [$middle], $right); } $array = [2,1,5,767,8,3,1,0]; print_r(quick($array));

快速排序

<?php // 插入排序。每插入一个元素都和前面已经完成排序的序列比较,序列中比要插入元素值大的元素则+1往前走,最终将插入元素放到序列中合适的位置。 function insertSort($array) { $len = count($array); for($i = 1; $i < $len; $i++) { $insert_value = $array[$i]; // 要插入到序列元素 // 计算插入位置,从序列的最后一个开始,逐一和要插入的值进行比较 for($j = $i-1; $j>=0; $j--) { if ($array[$j] > $insert_value) { $array[$j+1] = $array[$j]; // 不符合的前进一位,给要插入的值留出位置 } else { break; } } // 将要插入的元素放入为他空出来的位置 // 这里为什么要+1呢,因为上一次循环的元素已经靠后一个位置了,所以他的位置是空的,+1就是他的位置。 // 那又为什么这个赋值放在for之外呢,为什么不在else里赋值呢,因为第一次循环的时候$j的值为-1,不满足循环条件。 $array[$j+1] = $insert_value; } return $array; } $array = [2,1,5,767,8,3,1,0]; print_r(insertSort($array));
最新回复(0)