数组的冒泡排序
冒泡排序之所以叫冒泡排序,是因为使用这种算法进行排序的时候,数值会向气泡一样的从数组的一端漂浮到另一端。
假设正在将一组数字按照升序排列,较大的数会浮动到数组的右侧,而较小的值会浮动到数组的左侧。之所以产生这种现象是因为算法会多次在数组中移动,比较相邻的数据,而左侧值大于右侧值时将他们进行互换。
冒泡排序的核心思想是两两比较相邻的数,如果顺序相反则交换位置,直至没有顺序相反的为止。
例如 ; var arr = [4,3,2,1]
var arr = [4,3,2,1];
//第一轮比较 1) 4>3 交换位置 [3,4,2,1]
// 2) 4>2 交换位置 [3,2,4,1]
// 3) 4>1 交换位置 [3,2,1,4]
// 第一轮一共比较三次,最大的数到后面
//第二轮 1) 3>2 交换位置 [2,3,1,4]
// 2)3>1 交换位置 [2,1,3,4]
//3和4比较过了,所以第二轮不用再比较
//第二轮共比较两次
//第三轮 1) 2>1 交换位置 [1,2,3,4]
总结规律:如果需要排序一个有4项数字的数组,则需要比较3轮,第一次对比3次,第二次对比2次,第三次对比1次
function sort(arr){
for(var i = 0; i < arr.length; i++){
for(var j = 0; j < arr.length-1-i;j++){
if(arr[j]>arr[j+1]){
var temp = arr[j + 1];
arr[j+1] = arr[j];
arr[j] = temp;
}
}
}
return arr;
}
冒泡排序的原理:
- 比较相邻的元素。如果第一个比第二个大,就交换位置
- 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。最后的元素应该会是最大的数
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较
实现冒泡排序,每一次比较的次数是递减的。