在es5中我们主要学习了基本数据类型和引用数据类型。基本数据类型有String(字符串类型),number(数值类型),Boolean(布尔类型),undefined和null。而引用类型有对象,函数,数组。
在数组中我们有许许多多实用的方法,例如栈和队列方法,还有索引、截取、排序和迭代等等方法。其中排序的 reverse()和sort()都可以对数组进行排序。
对于排序算法而言,我们熟知的有冒泡排序、快速排序、插入排序和选择排序。
其中冒泡排序也就是升序(降序)用的比较多,那么这次来详细的对冒泡排序进行函数封装。
冒泡排序
什么是冒泡排序?
冒泡排序是一种简单的排序算法。它重复访问要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
封装思路
对于一个算法封装而言,最重要的是要理解算法的思路。下面就是冒泡排序的主要思路:
确定循环层数
如图,一个长度为五的数组我们一个进行了四轮遍历比较,由此我们有了第一层循环,而循环的结束条件为数组长度减一(i<=a.length-1)。
for (var i = 0; i < a.length; i++) { }
接着继续看每一轮的比较次数,每一轮我们都进行了四次比较,而每一次比较都是依次进行,由此有了第二层循环。误区:循环时我们比较的是相邻的元素,所以当从第a[0]开始遍历时,结束条件为(j<a.length-1)不是(j<=a.length-1);
for (var i = 0; i < a.length; i++) { for (var j = 0; j < a.length - 1; j++) { if (a[j] > a[j + 1]) { } } }
至此冒泡排序共有两层循环
判断及交换变量
当我们进行比较时,满足第一个比第二个大时我们会进行变量值交换,否则继续进行遍历循环。由此我们用到的if分支语句。
当判断满足是我们进行变量交换
if (a[j] > a[j + 1]) {
var num = '';
num = arr5[j];
a[j] = a[j + 1];
a[j + 1] = num;
}
所以当我们理解了算法思路,代码就容易实现了。
代码写完后套进函数里,那么冒泡排序的函数封装就完成了