排序算法---冒泡排序

冒泡排序算法是一种稳定的排序算法。
冒泡排序算法原理如下:
1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3. 针对所有的元素重复以上的步骤,除了最后一个。
4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

数据演示:
待排序序列: 10 7 15 2 5 27 13

0 第1轮:  7 10 2 5 15 13 【27】 比较6次 |  (相邻两个元素两两比较:分别是:7-10比较交换位置、10-15比较无需交换、15-2比较交换位置、15-5比较交换位置、15-27比较无需交换、27-13比较交换位置 【确定27】)

1 第2轮:  7 2 5 10 13 【15 27】 比较5次  (相邻两个元素两两比较:分别是:7-10比较无需交换、10-2比较交换位置、10-5比较交换位置、10-15比较无需交换、15-13比较交换位置 【确定15 27】)

2 第3轮:  2 5 7 10 【13 15 27】 比较4次  (相邻两个元素两两比较:分别是:7-2比较交换位置、7-5比较交换位置、7-10比较无需交换、10-13比较无需交换 【确定13 15 27】】)

3 第4轮:  2 5 7 【10 13 15 27】 比较3次  (相邻两个元素两两比较:分别是:2-5比较无需交换、5-7比较无需交换、7-10比较无需交换 【确定 10 13 15 27】)

4 第5轮:  2 5 【7 10 13 15 27】 比较2次  (相邻两个元素两两比较:分别是:2-5比较无需交换、5-7比较无需交换 【确定7 10 13 15 27】)

5 第6轮:  2 【5 7 10 13 15 27】 比较1次  (相邻两个元素两两比较:分别是:2-5比较无需交换 【确定5 7 10 13 15 27】)

6 第7轮:  【2 5 7 10 13 15 27】 比较0次  (相邻两个元素两两比较:只剩 2 【确定2 5 7 10 13 15 27】)

代码实现:

function bubbleSort($arr) {
	$len = count($arr);
	if($len<=1){
		return $arr;
	}
	for($i=0;$i<$len-1;$i++) { //控制循环轮数。7个数字,比较7轮
		for($j=0;$j<$len-1-$i;$j++) {  //每轮两两比较次数,每轮会确定一个数。每执行一轮,确定的数+1,需比较的数-1
			if($arr[$j]>$arr[$j+1]) { //如果前一个数比后一个数大,则需要交换两数的位置
				$temp = $arr[$j+1];
				$arr[$j+1] = $arr[$j];
				$arr[$j] = $temp;
			}
		}
	}
	
	return $arr;
}

print_r(bubbleSort($arr));
posted @ 2020-02-27 15:29  米饭!大米饭  阅读(229)  评论(0编辑  收藏  举报