算法--冒泡排序(1)
2018-02-22 本文已影响0人
小囧兔
首先排序分为四种:
交换排序: 包括冒泡排序,快速排序。
选择排序: 包括直接选择排序,堆排序。
插入排序: 包括直接插入排序,希尔排序。
合并排序: 合并排序。
一、冒泡排序
冒泡排序就像是抓一堆东西扔水里,重的沉在底部,轻的依次往上浮。
image.png
经过几次比较得到如下的结果:
image.png
外层循环表示的是要比较的次数,i=0;第一次比较,里层循环比较2和4,2比4小,不交换,4和5比较,4比5小,不交换,5和1比,交换,5和9比,5比9小,不交换,
上面的图只是第一次比较,也就是外层循环第一次循环的时候得到的结果是[2,4,1,5,9];
因为第一次循环的时候已经把最大的数沉在底部了,所以,外层第二次循环的时候,没有必要去比较数组的最后两项,里面不用再循环arr.length-1;而是arr.length-1-i;
var arr=[2,4,5,1,9];
function maopao(arr){
//第一层循环: 表明要比较的次数,比如arr.length-1个数,肯定要比较arr.length-1次
for(var i=0;i<arr.length-1;i++){
//第二层循环:里面的循环再次完整执行,由于最大的数已经在最后了,没有必要去比较数组的最后两项
for (var j=0;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1]){
var t=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t;
}
}
}
return arr;
}
console.log( maopao(arr)+"冒泡排序")
时间复杂度之类的,现在还不是很明白,不过总算明白了冒泡排序的里层循环的长度为何是数组-1-外层循环了