实现原理:在冒泡排序的过程中,按照要求从小到大排序或从大到小排序,不断比较数组中相邻两个元素的值,将值最大的元素或最小的元素交换至右端。
冒泡排序的优点(从小到大排序):每进行一趟排序,就会少比较一次,因为每进行一趟排序都会找出一个较大值。第一趟比较之后,排在最后的一个数一定是最大的一个数,第二趟排序的时候,只需要比较除了最后一个数以外的其他的数,同样也能找出一个最大的数排在参与第二趟比较的数后面。
<script>
var arr = [10, 6, 5, 27, 98, 22];
for (var i = 0; i < arr.length - 1; i++) { // 控制需要比较的轮数
for (var j = 0; j < arr.length - 1 - i; j++) { // 控制参与比较的元素,由于每完成一次完
//整的内循环都会将最大的一个值排在最后面,所以下一轮时最大值不用参与比较,所以需要减i
if (arr[j] > arr[j + 1]) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
}
}
}
console.log('排序后的结果' + arr);
// i=0 arr[j],arr[j+1]
// 0 10 1 6 6,10,5,27,98,22
// 1 10 2 5 6,5,10,27,98,22
// 2 10 3 27 6,5,10,27,98,22
// 3 27 4 98 6,5,10,27,98,22
// 4 98 5 22 6,5,10,27,22,98
// i=1 arr[j],arr[j+1]
// 0 6 1 5 5,6,10,27,22,98
// 1 6 2 10 5,6,10,27,22,98
// 2 10 3 27 5,6,10,27,22,98
// 3 27 4 22 5,6,10,22,27,98
// 4 27 5 98 5,6,10,22,27,98 这里可以不用比较所以减i
</script>
实现原理:从头至尾扫描序列,找出最小的一个元素,和第一个元素交换,接着从剩下的元素中继续这种选择和交换方式,最终得到一个有序序列。
<script>
var arr = [10, 6, 5, 27, 98, 22];
for (var i = 0; i < arr.length; i++) {
for (var j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
var temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
console.log('排序后的数组:' + arr);
}
}
}
//i=0 j=1时有两次交换 第一次是10和6比较交换,第二次是6和5进行比较交换
//第一次结果6,10,5,27,98,22
//第二次结果5,10,6,27,98,22
//i=1 j=2时有一次交换 10和6进行比较交换
//第一次结果5,6,10,27,98,22
//i=3 j=5时有一次交换 27和98进行比较交换
//第一次结果5,6,10,22,98,27
//i=4 j=5时有一次交换 98和27进行比较交换
//第一次结果5,6,10,22,27,98
</script>
本文地址:https://blog.csdn.net/m9311/article/details/107524964
如对本文有疑问, 点击进行留言回复!!
win10哪个版本稳定好用? 目前win10最稳定的版本对比介绍
Ubuntu怎么解决vi编辑器按上下左右变成ABCD的问题?
网友评论