算法题

来源:互联网 发布:律所能源法业务知乎 编辑:程序博客网 时间:2024/06/15 15:07

一、冒泡排序

基本思想:对需要排序的数组从后往前(逆序)进行多遍的扫描,当发现相邻的两个数值的次序与排序要求的规则不一致时,就将这两个数值进行交换。这样比较小(大)的数值就将逐渐从后面向前面移动。

二、快速排序

基本思想:在数组中挑出一个元素(多为第一个)作为标尺,扫描一遍数组将比标尺小的元素排在标尺之前,将所有比标尺大的元素排在标尺之后,通过递归将各子序列分别划分为更小的序列直到所有的序列顺序一致。

三、选择排序

基本思想:比如在一个长度为N的无序数组中,在第一趟遍历N个数据,找出其中最小的数值与第一个元素交换,第二趟遍历剩下的N-1个数据,找出其中最小的数值与第二个元素交换......第N-1趟遍历剩下的2个数据,找出其中最小的数值与第N-1个元素交换,至此选择排序完成

实例代码(以PHP为例):

<?phpnamespace Algorithm;class Algorithm {/** * [bubble_sort 冒泡排序] * @param  [type] $arr [数组] * @return [type]      [排序好的数组] */public static function bubble_sort($arr){$num = count($arr);for($i=0;$i<$num;$i++){for($j=1;$j<$num-$i;$j++){if($arr[$j-1]>$arr[$j]){$temp = $arr[$j-1];$arr[$j-1] = $arr[$j];$arr[$j] = $temp;}}}return $arr;}/** * [quick_sort 快速排序] * 快速排序的思想是:取出数组的第一个数,然后以第一个数与数组其他数对比,比第一个数小的存入左边的数组,大的存入右边的数组,然后递归调用,最后利用array_merge()函数把左中右合并。 * @param  [type] $arr [description] * @return [type]      [description] */public static function quick_sort($arr){//先判断是否需要继续进行    $length = count($arr);    if($length <= 1)     {       return $arr;    }$key = $arr[0];$left_arr = [];$right_arr = [];for ($i=1; $i < $length ; $i++) { if($arr[$i]<$key){$left_arr[] = $arr[$i];}else{$right_arr[] = $arr[$i];}}$left_arr = self::quick_sort($left_arr);$right_arr = self::quick_sort($right_arr);$newArr = array_merge($left_arr,array($key),$right_arr);return $newArr;}/** * [select_sort 选择排序] * 比如在一个长度为N的无序数组中,在第一趟遍历N个数据,找出其中最小的数值与第一个元素交换,第二趟遍历剩下的N-1个数据,找出其中最小的数值与第二个元素交换......第N-1趟遍历剩下的2个数据,找出其中最小的数值与第N-1个元素交换,至此选择排序完成 * @param  [type] $arr [description] * @return [type]      [description] */public static function select_sort($arr){$len = count($arr);$c = 0;for ($i=0; $i < $len-1; $i++) { $valMin = $arr[$i];$keyMin = $i;for($j=$i+1; $j<$len; $j++){if($valMin>$arr[$j]){$valMin = $arr[$j];$keyMin = $j;}$c++;}$temp = $arr[$i];$arr[$i] = $arr[$keyMin];$arr[$keyMin] = $temp;}echo $c;return $arr;}}$arr = [43,54,76,83,212,4,223,5,65,8,98];// $res = Algorithm::bubble_sort($arr);// $res = Algorithm::select_sort($arr);$res = Algorithm::quick_sort($arr);// $str = 'makle__came';print_r($res);
 
原创粉丝点击