juan_zi
2016-03-10 14:40
<script type="text/javascript">
function sortNum(a,b) {
return a - b;
//升序,如降序,把“a - b”该成“b - a”
}
var myarr = new Array("80","16","50","6","100","1");
document.write(myarr + "<br>");
document.write(myarr.sort(sortNum));
</script>
这里为什么sortNum()函数里return a-b就定义了升序?
首先,题主要明确什么是冒泡排序。说白了就是两两比较
冒泡排序:它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。
接下来,让我们来看sort()方法
myArray.sort(sortMethod);
随便定义一个sortMethod函数:
function sortNum(a,b) {
return a - b;
//升序,如降序,把“a - b”该成“b - a”
}
/*注意: 该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:
若返回值<=-1,则表示 a在排序后的序列中出现在 b之前。
若返回值>-1 && <1,则表示 a 和 b 具有相同的排序顺序。
若返回值>=1,则表示 a 在排序后的序列中出现在 b之后。*/
这是什么意思呢就是说,计算机本身并不根据大小排序,它根据你写的sort()里面的函数,就是sortMethod,它的返回值来决定哪个数在先,哪个数在后。
function sortNum(a,b)注意,这个a,b顺序是不变的,计算机根据函数返回值判断二者先后关系!!!
举个例子,a=100 b=20 a-b>=1说明a肯定比b大吧,然后就返回了1,sort方法一看,你这个返回值大于1啊,a就应该在b后面,然后继续比较下一组数,就是用冒泡排序的方法比较下一组数,你想,如果比较大的那个数往后排,这不就是升序吗?
然后,你想降序,把函数改成b-a了,现在sort方法得到的返回值是b-a的了,现在a还是100,b还是20,b-a<=-1,sort方法一看,你这个返回值小于-1啊,a就应该在b前面,然后,继续冒泡排序,现在的情况是,比较小的那个数往后排,这不就是降序吗?
sort的参数,为一个函数,那么这个函数接受2个参数,a, b
这个函数在:
a == b 是为0
a > b 时为 1
a < b时 为-1
JavaScript进阶篇
468061 学习 · 21891 问题
相似问题