由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。
冒泡排序是经过n-1趟子排序完成的,第i趟子排序从第1个数至第n-i个数,若第i个数比后一个数大(则升序,小则降序)则交换两数。
10个数进行排序,用二重循环实现,外循环变量设为i,内循环变量设为j,外循环重复9次,内循环依次重复9,8,...,1次,每次进行比较的两个元素都是与内循环j有关的,它们可以分别用a[j]和a[j+1]标识,i的值依次为1,2,...,9,对于每一个i,j的值依次为0,1,2,...10-i。
如下实例:
$data = array(5,8,6,4,2,9,7,3,1,10);
/**
* 冒泡排序
*
* @access public
* @param array $data 要排序的索引数组
* @return array 排好序的数组
*/
public function bubbleSort($data){
$count = count($data);
for($i = 0; $i < $count; $i++){
$tmp = null;
for($j = 0; $j < $count - $i - 1; $j++){
if($data[$j] > $data[$j + 1]){
$tmp = $data[$j];
$data[$j] = $data[$j + 1];
$data[$j + 1] = $tmp;
}
}
}
return $data;
}
$data = bubbleSort($data);
print_r($data);
输出:
Array( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 7 [7] => 8 [8] => 9 [9] => 10)