一、冒泡排序
实现原理
每次排序相邻两个元素进行比较,满足大小关系,则后面一个元素跟下一个元素接着比较;不满足,则两个元素交换位置,后面那个元素接着跟下一个元素比较。这样每次循环都能找到一个最大的元素,下次循环就可以不带它了。
js实现
顺序排序(从小到大)
function bubbleSort(arr) {
for (var i = 0; i < arr.length; i++) { //i控制循环轮数
// 这里的j<arr.length-1-i可以解释一下
//-1的原因:比如三个数,两两比较,我们只需要比较2次,这里-1是最后一个元素不需要再找别人比较了
//-i的原因:因为每次外层循环过后(即一轮循环过后),都帮我们找到了一个最大的元素,下次循环我们就不需要带上它了
for (var j = 0; j < arr.length - 1 - i; j++) { //控制正在比较的元素下标
if (arr[j + 1] < arr[j]) { //如果后一个元素小于前一个元素
//则替换两个元素的位置
var center = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = center
}
}
}
return arr;
}
var arr = [9, 8, 3, 5, 6, 6, 4, 7]
arr = bubbleSort(arr)
console.log(arr)
稳定性
冒泡排序是一种稳定的算法。
为什么说冒泡排序是稳定的,首先我们要知道判断稳定性的条件是:
在排序过程中,相等的两个元素不会发生前后位置的变化,我们就说这个算法是稳定的。
这里,因为我们两个元素交换的条件,是要后一个元素小于前一个元素,两比较元素相同,则不做操作,所以排序后两相同的元素位置并没有发生变化,所以冒泡排序是一种稳定的算法。
后续持续更新。。。