冒泡、二分法插入及快速排序算法

1.冒泡排序算法

过程:

1.遍历整个数组,每两两相邻的元素进行比较,如$a[$i]>$a[$i+1]则互换位置,每次比较消除一个逆序。

2.每一次循环后,下次再需要循环的次数减少1。

<?php
// 冒泡排序
$arr = createarr(20);
printarr($arr);
popsort($arr);
printarr($arr);  

function createarr($num=10){
    $arr = array();
    for($i=0; $i<$num; $i++){
        array_push($arr, mt_rand(0,999));
    }
    return $arr;
}  

function printarr($arr){
    echo 'arr:'.implode(',', $arr).'<br>';
}  

function popsort(&$arr){
    for($i=0,$length=count($arr)-1; $i<$length; $i++){
        for($j=0; $j<$length-$i; $j++){
            if($arr[$j]>$arr[$j+1]){
                $tmp = $arr[$j];
                $arr[$j] = $arr[$j+1];
                $arr[$j+1] = $tmp;
            }
        }
    }
}
?>

2.二分法插入排序

过程:

1.首先,原数组是一个有序序列,$low=0 $high=count($arr)-1。

2.将要插入的数与数组中间位置的元素进行比较,

如果比中间元素大,则$low=$mid+1作为下一次判断的数组开头。

如果比中间元素小,则$high=$mid-1作为下一次判断的数组结尾。

3.直到$low>$high结束,$low就是新元素插入的位置。

4.将数组中从$low开始的元素全部向后移动一位,之后在$low位置插入新元素。

<?php
// 二分法插入排序  

$arr = createarr(20);
$key = mt_rand(0,99);
printarr($arr);
echo 'key='.$key.'<br>';
binsort($arr, $key);
printarr($arr);  

function createarr($num=10){
    $arr = array();
    for($i=0; $i<$num; $i++){
        array_push($arr, mt_rand(0,99));
    }
    sort($arr); // 有序序列
    return $arr;
}  

function printarr($arr){
    echo 'arr:'.implode(',', $arr).'<br>';
}  

function binsort(&$arr, $key){  

    $low = 0;
    $high = count($arr)-1;  

    while($low<=$high){
        $m = $low + (int)(($high-$low)/2);
        $mkey = $arr[$m];
        if($key>=$mkey){
            $low = $m + 1;
        }else{
            $high = $m - 1;
        }
    }  

    // 移动插入位置之后的元素,插入新元素
    for($i=count($arr)-1; $i>=$low; $i--){
        $arr[$i+1] = $arr[$i];
    }  

    $arr[$low] = $key;
}
?>

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索数组
, 排序
, 冒泡排序
, 位置
, 元素
, 二分法
, 2分法
, 二分法算法
, 插入算法
, 二分法算法实例
中间
二分法排序比冒泡、二分法排序算法、java二分法排序算法、快速排序 二分法、快速排序和二分法,以便于您获取更多的相关知识。

时间: 2025-01-02 19:48:18

冒泡、二分法插入及快速排序算法的相关文章

常用排序算法整理分享(快速排序算法、希尔排序)_C 语言

整理了几个排序算法,通过测试来看,最快的还是快速排序算法,简直不是一个数量级的速度. 复制代码 代码如下: #include <stdio.h>#include <stdlib.h>#include <stdint.h>#include <stdbool.h>#include <time.h>#include <unistd.h> //一些排序算法整理//插入排序算法//直接插入排序voiddirect_insert_sort(int

插入数据-利用二分法插入一个数据,数据总是无法达到有序的效果

问题描述 利用二分法插入一个数据,数据总是无法达到有序的效果 主要问题出现在insertElement()方法,其中记录插入数据的midPos始终有问题.始终是会移动有问题.请帮忙看一下. /** * Description: * <br>本程序主要实现一个包含有序数组类. * <br>主要目的:将数组封装起来,然后,外界只能利用提供出去的接口方法,访问数组. * <br>Program Name:OrderArray * <br>Date:2015-09-

Python实现冒泡,插入,选择排序简单实例_python

本文所述的Python实现冒泡,插入,选择排序简单实例比较适合Python初学者从基础开始学习数据结构和算法,示例简单易懂,具体代码如下: # -*- coding: cp936 -*- #python插入排序 def insertSort(a): for i in range(len(a)-1): #print a,i for j in range(i+1,len(a)): if a[i]>a[j]: temp = a[i] a[i] = a[j] a[j] = temp return a #

java快速排序算法与冒泡排序算法比较

首先看下,冒泡排序算法与快速排序算法的效率: 如下的是main方法  代码如下 复制代码 /**   *  * @Description:  * @author:cuiyaonan2000@163.com  * @date 2014年11月5日 下午1:02:10   */  public static void main(String[] args) {   //快速排序算法测试   int[] qArray = new int[100000];   for (int i = 0; i < 1

快速排序算法在Swift编程中的几种代码实现示例_Swift

总所周知 快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用. 基本原理是: 数组a = [1,3,5,7,6,4,2] 1 选定一个 基准 a[0] 2 把比 a[0]小的放左边,比a[0]大的放右边. 中断递归如果少于两个数字 则不执行. 3 然后再分别对两边 执行 1,2,3操作. 对快速排序 的 想法 1 在待排序元素 大部分是有序的情况下, 速度 非常很快. 2 在最差的情况下,速度就很慢了. 相当于冒泡了 3 所以 快排的 优化, 定基准 非常重要,

内嵌汇编与C/C++实现的冒泡排序,快速排序算法排序500W个数据对比

内嵌汇编是微软为了提高程序的直接操作硬件能力,以及实现大任务程序效率的提高,而嵌入在VC中的,他不依赖于汇编器对内嵌汇编代码进行汇编,这些内嵌汇编代码由C编译器内部实现,可以使程序好像自陷到汇编状态一样.这意味着你如果在C/C++程序中使用了 inline  asm进行 汇编 那么 就注定无法跨平台的,对于没有汇编基础的同学是需要去学习下王爽的8086汇编程序设计.,因为有些时候C++程序员是不得不懂这些东西的 ,否则你永远无法知道编译器为你的函数做了什么,.你还有哪些地方需要优化, 不管处于什

如何实现快速排序算法

快速排序: 代码: <?php /** 快速排序算法 * 1. 在数组中找一个元素作为key,一般取数组第一个元素作为key * 2. i=0, j=数组长度-1 * 3. j-- 当 arr[j]<key, arr[i]与arr[j]交换位置 * 4. i++ 当 arr[i]>key, arr[i]与arr[j]交换位置 * 5. 重复3,4 直到 i==j 时,完成. * 6. 将key分隔的左右两组元素再分别执行 1,2,3,4,5 (递归). */ $arr = array()

快速排序算法的C++实现

快速排序基本特性 时间复杂度:O(n*lgn) 最坏:O(n^2) 空间复杂度:最好情况下:O(lgn),最坏情况:O(n),平均情况:O(lgn) 不稳定. 关于快速排序的空间复杂度,谢谢@命运他爹 同学指正.详述一下. 快速排序由于每次递归的时候会占用一个空间返回中间数位置,所以一次递归的空间复杂度为O(1). 最好情况和最坏情况下的递归深度为O(lgn),相应的空间复杂度就是O(lgn) 最坏情况下的递归深度为O(n),空间复杂度为O(n). 算法 QUICKSORT(A, p, r) i

快速排序算法的C语言实现

经典的快速排序算法, 作为一个编程者, 任何时候都要完整的手写. 代码: /* * main.cpp * * Created on: 2014.6.12 * Author: Spike */ /*eclipse cdt, gcc 4.8.1*/ #include <stdio.h> #include <stdlib.h> int RandomInRange(int min, int max) { int random = rand() % (max - min + 1) + min