四基础排序算法:插入排序、选择排序、冒泡排序、快速排序
2015-03-01 10:18
459 查看
/** * 插入排序(Insertion Sort)的基本思想是: * 每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。 * 插入排序:就是把第一个数当成已排序还的序列,然后把后面的数一个一个插入到前面适当的位置 */ function insert_sort($arr){ //计算数组元素个数 $total_count = count($arr); if($total_count <= 0) return 0; //从这里开始循环 从1开始,表示把序列的第一个元素当成有序序列 for ($i = 1; $i < $total_count; $i++) { $current = $arr[$i]; $j = $i - 1 ; //$current 在while循环里面,值一直没有变化,只是位置有变化 while ($current < $arr[$j]) { $arr[$j+1] = $arr[$j] ; $arr[$j] = $current; $j--; if($j < 0) break; } } return $arr; }
/** * 选择排序(Selection Sort)的基本思想是: * 每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子文件的最后,直到全部记录排序完毕。 * 选择排序:每次都选出最小的一个放在最前面,最开始的时候把第一个当做最小的 */ function select_sort($arr){ $total_count = count($arr); if($total_count <= 0) return 0; for ($i=0; $i < $total_count; $i++) { //拿第一个后面的每一个与第一比,每次比完都是把小的放在第一个的位置 ,比完内层的这个for循环,就选出了最小的一个 for ($j = $i + 1 ; $j < $total_count; $j++) { $f = $i; if($arr[$f] > $arr[$j]){ $f = $j; } if($f != $i){ //如果不等于,表示上一个if 发生了 $temp = $arr[$i]; $arr[$i] = $arr[$f]; $arr[$f] = $temp; } } } return $arr; }
/** * 冒泡排序的基本思想是: * 两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止 */ function bubble_sort($arr){ $total_count = count($arr); for ($i=0; $i < $total_count; $i++) { for ($j=$i+1; $j < $total_count; $j++) { if($arr[$i] > $arr[$j]){ $tmp = $arr[$i]; $arr[$i] = $arr[$j]; $arr[$j] = $tmp; } } } return $arr; }
/** * 看看就会明白 */ function quick_sort($arr){ $total_count = count($arr); if($total_count <= 1) return $arr; $middle = $arr[0]; $left_arr = $right_arr = array(); for ($i=1; $i < $total_count; $i++) { if($arr[$i] > $middle){ $right_arr[] = $arr[$i]; }else{ $left_arr[] = $arr[$i]; } } $left_arr = quick_sort($left_arr); $right_arr = quick_sort($right_arr); return array_merge($left_arr , array($middle) , $right_arr); }
参考:http://www.nowamagic.net/librarys/veda/detail/761
相关文章推荐
- 排序算法---基础算法(冒泡排序,快速排序,选择排序,直接插入排序,桶排序)
- 数据结构与算法:七种排序算法总结(冒泡排序、选择排序、直接插入排序、希尔排序、堆排序、归并排序、快速排序)
- C语言8种排序算法及其实现 1.希尔排序 2.二分插入法 3.直接插入法 4.带哨兵的直接排序法 5.冒泡排序 6.选择排序 7.快速排序 8.堆排序
- 简单的排序算法——插入排序,选择排序,交换排序(冒泡排序,快速排序)
- 基础排序算法(冒泡排序、选择排序、插入排序)
- java中各种常用排序实现(直接插入排序、直接选择排序、堆排序、冒泡排序、快速排序和归并排序)
- 排序算法汇总(选择排序 ,直接插入排序,冒泡排序,希尔排序,快速排序...)
- 排序算法汇总(选择排序 ,直接插入排序,冒泡排序,希尔排序,快速排序,堆排序)
- 排序算法(快速排序、直接插入排序、直接选择、冒泡排序)
- 插入排序是基本排序算法中最好的一种,虽然插入排序也是需要O(N^2)时间,但它比冒泡排序快一倍,比选择排序还要快点。
- 排序算法: 冒泡排序, 快速排序,希尔排序,直接插入排序 ,直接选择排序,归并排序,堆排序
- 简单的排序算法——插入排序,选择排序,交换排序(冒泡排序,快速排序)
- 排序算法解析——冒泡排序、选择排序、快速排序
- JAVA中排序算法(冒泡排序、选择排序、插入排序、快速排序)
- 排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序
- C#实现所有经典排序算法(选择排序 冒泡排序 快速排序)
- C#实现所有经典排序算法(选择排序 冒泡排序 快速排序)
- 基础排序——冒泡排序、选择排序、插入排序的讲解、代码实现
- 菜鸟学编程之三:三种最基本排序算法的实现(冒泡排序、选择排序、直接插入排序)
- 黑马程序员_java基础学习笔记之排序算法(选择排序、冒泡排序