冒泡排序(Bubble Sort),是一种[计算机科学领域的较简单的排序算法。
它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成。
这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。
图解:
20190913114606953.png
1:冒泡算法的原理:冒泡算法把数组中的每个值从前向后进行比较,每次循环会将当前数值与后一个数值进行比较,如果符合条件, 会进行数值互换,多次循环以此来达到重新排序的目的。
2:冒泡算法的代码构成和每一步所代表的意义:
function funct(arrr){
for(var i = 0;i < arrr.length; i++){
for(var j = 0; j < arrr.length -1 -i;j++){
if(arrr[j] < arrr[j+1]){
var num = arrr[j]
arrr[j] = arrr[j+1]
arrr[j+1] = num
}
}
}
return arrr
}
首先需要一个for循环来循环数组中的每一项数值,之后再嵌套一个for循环 用来比较数组中的数值,并进行重新赋值并排序。这里有一个难点,就是j < arrr.length - 1,之所以小于arrr.lrngth-1 是因为比较大小时需要与后一项比较,如果j < length的话 这个循环的最后一项的返回值会返回undefind,这会改变原数组的内容,所以需要-1。 之后是if判断来比较前后数值的大小,这个地方是这个算法最难理解的地方。 if(arrr[j] < arrr[j+1]){ 这里会判断 数组[j]下标所对应值是否小于下一个数值 var num = arrr[j] 如果通过判断,则声明一个名抓取较小的一项的数值 arrr[j] = arrr[j+1] 将较小数值所对应的下标位置重新赋值为较大的数值 arrr[j+1] = num 将较大数值所对应的下标位置重新赋值为之前声明抓取的较小数值以此来实现位置互换 每一次i循环后都会确定一个数组中最小值放在数组的最后 所以 j < length -1 再减去i,以此来减少函数所占用的内存和计算时间。
网友评论