冒泡排序是一种简单的排序算法,它也是一种稳定的排序算法。其原理是重复扫描待排序序列,并比较每一对相邻的元素,当该元素排序不正确时进行交换,一直重复这个过程,直到没有任何两个相邻元素可以交换,就表明完成了排序
一般情况下,称某个排序算法稳定,指的是当待排序序列中有相同的元素时,它们的相对位置在排序前后不会发生改变。
下面我们就以arr = [8,7,6,5,4,3,2,1,9]来进行降序排列,使用冒泡的方式
在sort函数中第一个for循环循环第一次时
8 >7 换位 此时[7,8,6,5,4,3,2,1,9]
8 > 6换位 此时[7,6,8,5,4,3,2,1,9]
8 > 5换位 此时[7,6,5,8,4,3,2,1,9]
8 > 4换位 此时[7,6,5,4,8,3,2,1,9]
8 > 3换位 此时[7,6,5,4,3,8,2,1,9]
8 > 2换位 此时[7,6,5,4,3,2,8,1,9]
8 > 1换位 此时[7,6,5,4,3,2,1,8,9]
8 < 9不换位 此时依然是 [7,6,5,4,3,2,1,8,9]
从第一次循环中我们得到 第一次循环的最高值 9
同理可得:
从第二次循环中我们得到 第一次循环的最高值 8
从第一次循环中我们得到 第一次循环的最高值 7
同理可得
我们最终可以实现这个数组的从小到大排序 [1, 2, 3, 4, 5,6, 7, 8, 9]
由此我们也可以看出此算法的时间复杂度是O(n2)
var arr = [8,7,6,5,4,3,2,1,9]// 排序的本质是比较和交换function exchange(a,b){//交换var tem = arr[a];arr[a] = arr[b];arr[b] = tem;}function sort(arr){//排序for(i = 0; i < arr.length; i++) {for(j = 0; j < arr.length - 1 - i; j++ ){if(arr[j] > arr[j+1]){exchange(j, j + 1)}}}}sort(arr)console.log(arr) //[1, 2, 3, 4, 5,6, 7, 8, 9]
