几个简单易懂的排序算法php
几个简单易懂的排序算法。排序算法,在应用到解决实际问题的时候(由于不一定总是数字排序),重点要分析出什么时候该交换位置。
<?php // 冒泡排序
function bubble_sort(array $arr){
$len = count($arr) - 1;
for($i=0; $i< $len; $i++){
// 升序的话,两两比较第一轮排序过后,最后一个一定是最大的了;
// 所以第二轮时$j依然从0开始,但是结束的时候只需要管前$len-1的长度
for($j=0; $j < $len-$i; $j++){
if ($arr[$j] > $arr[$j+1]){
$temp = $arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $temp;
}
}
}
return $arr;
} // 选择排序
function select_sort(array $arr){
$len = count($arr) - 1;
for($i=0; $i< $len; $i++){
for($j=$i+1; $j <= $len; $j++){
// 选择排序,就是选择下边是$i的元素,固定住它,让它去和$j的比和交换
if ($arr[$j] < $arr[$i]){
$temp = $arr[$j];
$arr[$j] = $arr[$i];
$arr[$i] = $temp;
}
}
}
return $arr;
} // 插入排序
/** 所谓插入排序法,就是检查第i个数字,如果在它的左边的数字比它大,进行交换,这个动作一直继续下去,直到这个数字的左边数字比它还要小,就可以停止了。插入排序法主要的回圈有两个变数:i和j,每一次执行这个回圈,就会将第i个数字放到左边恰当的位置去。**/
function insert_sort(array $arr){
$len = count($arr) - 1;
for($i=0; $i<= $len; $i++){
// 在$i位置前面的元素进行插入
for($j=$i; $j >0; $j--){
if ($arr[$j-1] > $arr[$j]){
$temp = $arr[$j];
$arr[$j] = $arr[$j-1];
$arr[$j-1] = $temp;
}
}
}
return $arr;
} $arr = array(12, 9, 1, 4, 6, -3); $bubble = bubble_sort($arr);
$select = select_sort($arr);
$insert = insert_sort($arr); echo '<pre>';
print_r($bubble); echo '<pre>';
print_r($select); echo '<pre>';
print_r($insert); /**
*
Array
(
[0] => -3
[1] => 1
[2] => 4
[3] => 6
[4] => 9
[5] => 12
)
*/
排序算法,在应用到解决实际问题的时候(由于不一定总是数字排序),重点要分析出什么时候该交换位置。
用冒泡法实现了一个简单的排序问题,题目是这样的。
<?php
$arr = array(
'B5','D3','B4','B2','C5','A1','A2','A6','A4','A5','A6','B1','C1'
); $len = count($arr) - 1;
for($i=0; $i< $len; $i++){
for($j=0; $j < $len-$i; $j++){
$first_1 = getstr($arr[$j]);
$first_2 = getstr($arr[$j],1);
$second_1 = getstr($arr[$j+1]);
$second_2 = getstr($arr[$j+1],1);
$con1 = $first_1=='A' &&
( $second_1!='A' || ($second_1=='A' && $first_2<$second_2) );
$con2 = $first_1!='A' && $second_1!='A' &&
($first_2<$second_2 || ($first_2==$second_2 && ord($first_1)<ord($second_1) )); if ($con1 || $con2){
$temp = $arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $temp;
}
}
} // 取字符串 A1中的A或者1
function getstr($str,$type=0){
return substr($str, $type,1);
} print_r($arr);
echo array_shift($arr); /** *
Array
(
[0] => C5
[1] => B5
[2] => B4
[3] => D3
[4] => B2
[5] => C1
[6] => B1
[7] => A6
[8] => A6
[9] => A5
[10] => A4
[11] => A2
[12] => A1
)
*
*
C5
*/
几个简单易懂的排序算法php的更多相关文章
- 十大经典排序算法+sort排序
本文转自:十大经典排序算法,其中有动图+代码详解,本文简单介绍+个人理解. 排序算法 经典的算法问题,也是面试过程中经常被问到的问题.排序算法简单分类如下: 这些排序算法的时间复杂度等参数如下: 其中 ...
- JavaScript实现常用的排序算法
▓▓▓▓▓▓ 大致介绍 由于最近要考试复习,所以学习js的时间少了 -_-||,考试完还会继续的努力学习,这次用原生的JavaScript实现以前学习的常用的排序算法,有冒泡排序.快速排序.直接插入排 ...
- 排序算法----基数排序(RadixSort(L))单链表智能版本
转载http://blog.csdn.net/Shayabean_/article/details/44885917博客 先说说基数排序的思想: 基数排序是非比较型的排序算法,其原理是将整数按位数切割 ...
- 常见排序算法(附java代码)
常见排序算法与java实现 一.选择排序(SelectSort) 基本原理:对于给定的一组记录,经过第一轮比较后得到最小的记录,然后将该记录与第一个记录的位置进行交换:接着对不包括第一个记录以外的其他 ...
- 几大排序算法的Java实现
很多的面试题都问到了排序算法,中间的算法和思想比较重要,这边我选择了5种常用排序算法并用Java进行了实现.自己写一个模板已防以后面试用到.大家可以看过算法之后,自己去实现一下. 1.冒泡排序:大数向 ...
- 排序算法----基数排序(RadixSort(L,max))单链表版本
转载http://blog.csdn.net/Shayabean_/article/details/44885917博客 先说说基数排序的思想: 基数排序是非比较型的排序算法,其原理是将整数按位数切割 ...
- 排序算法汇总(C/C++实现)
前言: 本人自接触算法近2年以来,在不断学习中越多地发觉各种算法中的美妙.之所以在这方面过多的投入,主要还是基于自身对高级程序设计的热爱,对数学的沉迷.回想一下,先后也曾参加过ACM大大小小的 ...
- 用Java来写常见的排序算法
随着校招的临近 算法是校招中很重要的一个部分 总结了常见几种排序算法,各种算法的时间复杂度和空间复杂度大家也需要多了解下 package com.huwei.sort; /** * 各种排序算法 * ...
- 模板化的七种排序算法,适用于T* vector<T>以及list<T>
最近在写一些数据结构以及算法相关的代码,比如常用排序算法以及具有启发能力的智能算法.为了能够让写下的代码下次还能够被复用,直接将代码编写成类模板成员函数的方式,之所以没有将这种方式改成更方便的函数模板 ...
随机推荐
- js-ES6学习笔记-Class(5)
1.原生构造函数会忽略apply方法传入的this,也就是说,原生构造函数的this无法绑定,导致拿不到内部属性.比如,Array构造函数有一个内部属性[[DefineOwnProperty]],用来 ...
- javascript: 数组详细操作方法及解析合集(9个改变8个不变12个遍历)
改变原数组的方法(9个): 1 2 3 4 5 let a = [1,2,3]; ES5: a.pop()/ a.shift()/ a.push()/ a.unshift()/ a.reverse() ...
- 【读书笔记】iOS-网络-负载
负载指的是在服务的请求响应事务中交换的数据.常见的负载格式包括XML,JSON与HTML. 进入与发出的负载数据存在很多形式与大小.比如,有些开发者会使用原生的字符串或是以分隔符分开的数据与Web S ...
- 数据库查询字段为null 时,返回0
oracle select nvl(字段名,0) from 表名; sqlserver select isnull(字段名,0) from 表名; mysql select ifnull(字段名,0) ...
- 令人血脉喷张的animate.css
都说html5.css3是大局是潮流,尽管css3也不难,学起来比较简单,但我还是喜欢他的轻量级集大成者的animate.css框架,初学的小伙伴们加油啦 下面我分析一下animate.css框架里面 ...
- 高德地图 JS API - 根据地名实现标记定位
德地图 JS API 使用前的准备工作请参考官方网站说明: https://lbs.amap.com/api/javascript-api/guide/abc/prepare 根据地名实现地图标记定位 ...
- CADO SAP tcode - Time Sheet: Display Data
CADO (Time Sheet: Display Data) is a standard SAP transaction code available within R/3 SAP systems ...
- 关于ajax 传递的参数
ajax 发送的数据,默认都是字符串,不能直接传递list(列表),或者dict(字典). 若要 传递list(列表),或者dict(字典),需要进行一些操作. list 需要进行列表序列化,在aja ...
- go语言练习:数组
1.创建数组: package main import "fmt" func main() { var lst = [3]int{1, 2, 3} //var name=[数量]类 ...
- go语言练习:幂、函授接收和返回参数、转义字符、变量和常量
1.实现a^b次方 package main func main() { r2 := power1(2,4) println(r2) } func power1(a uint64, b uint64) ...