原理:它是让临近的两个数字之间两两比较,按照从小到大或者从大到小的顺序进行排列。
下面我用具体的数组来演示一遍整体效果
假设有 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;
?>
输出结果如下:
这种排序比较耗时,时间复杂度为O(n^2)