php实现经典冒泡排序算法

原理:它是让临近的两个数字之间两两比较,按照从小到大或者从大到小的顺序进行排列。

下面我用具体的数组来演示一遍整体效果

假设有 8、5、1、9、3 五个数,按照从小到大进行排序

第一趟排序

第一次比较 8和5
交换前:<strong> 8、5</strong>、1、9、3
交换后:<strong> 5、8</strong>、1、9、3

第二次比较8和1
交换前: 5、<strong>8、1</strong>、9、3
交换后: 5、<strong>1、8</strong> 、9、3

第三次比较8和9
交换前:5、1、<strong>8 、9</strong>、3
交换后:5、1、<strong>8 、9</strong>、3

第四次比较9和3
交换前:5、1、8 、<strong>9、3</strong>
交换后:5、1、8 、<strong>3、9</strong>

看到了吧,这样第一趟就能让最大的数排在最后面了

第二趟排序

第一次比较5和1
交换前:<strong>5、1</strong>、8 、3、9
交换后:<strong>1、5</strong>、8 、3、9

第二次比较5和8
交换前:1、<strong>5、8 </strong>、3、9
交换后:1、<strong>5、8</strong> 、3、9

第三次比较8和3
交换前:1、5、<strong>8、3</strong> 、9
交换后:1、5、<strong>3、8</strong>、9

第三趟排序

第一次比较1和5
交换前:<strong>1、5</strong>、3、8、9
交换后:<strong>1、5</strong>、3、8、9

第二次比较5和3
交换前:1、<strong>5、3</strong>、8、9
交换后:1、<strong>3、5</strong>、8、9

第四趟排序

第一次比较1和3
交换前:<strong>1、3</strong>、5、8、9
交换后:<strong>1、3</strong>、5、8、9

由以上得到,n个数,需要比 n-1趟,每 m 趟需要比较 n-m次
得到最终结果 1、3、5、8、9

下面附上我的php代码:

<?php

  $data = array(8,5,1,9,3);
  $lenth = count($data);

  for($i=0; $i<$lenth-1; $i++){
    for($j=0; $j<$lenth-$i-1; $j++){
      if($data[$j]>$data[$j+1]){
        $temp = $data[$j];
        $data[$j] = $data[$j+1];
        $data[$j+1] = $temp;
      }
    }
  }
  echo "<pre>";print_r($data);die;
?>

输出结果如下:

Paste_Image.png

这种排序比较耗时,时间复杂度为O(n^2)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 10,585评论 0 52
  • 概述:排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    每天刷两次牙阅读 9,084评论 0 15
  • 排序的基本概念 在计算机程序开发过程中,经常需要一组数据元素(或记录)按某个关键字进行排序,排序完成的序列可用于快...
    Jack921阅读 5,341评论 1 4
  • 一、 单项选择题(共71题) 对n个元素的序列进行冒泡排序时,最少的比较次数是( )。A. n ...
    貝影阅读 13,030评论 0 10
  • 01身边的朋友,甚至00后的表弟们都是王者荣耀的忠实粉丝,有天我旁敲侧击的问他们:玩游戏累吗? 异口同声的说:不累...
    0黑色蔷薇0阅读 2,472评论 0 1