右键,点击检查,
按顺序点击,获取脚本的运行代码:
我的脚本是bubble.html,存储在www.test.com域名下面的js/f目录下面,每个人的脚本不一样,存储的目录也不一样,请根据自己的情况来。
调出脚本的内容后,下面就是调试代码了。
选择好了断点之后,接下来在谷歌浏览器中再次运行脚本,就是对下面的www.test.com/js/f/bubble.html再回车运行
再次运行之后,你会看到这样的东西:
看到上面的那个蓝色矩形框了吗?这个蓝色矩形框就是脚本正在运行的代码位置,那我们怎么让脚本的代码一步步的运行呢?
这里之所以对这个脚本的for循环代码进行断点监控,其实,我是为了查看冒泡排序到底是怎么循环操作的,对于新手来说,这样子直观的查看冒泡排序代码的运行情况会更好的了解算法的执行过程。
对于这个调试小功能就介绍到这里了,下面进入正题,没办法直接想象出冒泡排序的执行情况的话,你可以按我上面的步骤调出谷歌的调试功能,直观的查看冒泡排序的整个过程。
介绍一下两个变量互相调换的思维,我们借助中间变量来调换:
//交互元素,这里的代码是从脚本中截取出来的,这么简单,应该不影响理解if(arr[j] > arr[j+1]){mark = false;var temp = arr[j];//temp是中间变量,把要交换的第一个元素arr[j]赋值给中间变量,也是把第一个元素存储起来arr[j] = arr[j+1];//第二个元素赋值给第一个元素,因为第一个元素我们已经存储在中间变量中了,所以我们不用担心它的值会被覆盖掉arr[j+1] = temp;//temp存储了第一个元素的值,把它赋值给第二个元素,就是把第一个元素赋值给第二个元素了,到这一步,两个元素已经交换位置了}再介绍一下,冒泡排序的算法过程:
//外层控制轮数for(var i=0;i<len;i++){ //内层对数组元素进行冒泡选择 for(var j=0;j<len-1-i;j++){ //交互元素 if(arr[j] > arr[j+1]){ var temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } }}上面那两个嵌套的for循环看到了吗?外层的for循环,我们就是用来控制比较········轮数········的,
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-cn"><head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /> <title>冒泡排序</title> <meta name="keywords" content="关键字列表" /> <meta name="description" content="网页描述" /> <link rel="stylesheet" type="text/css" href="" /> <style type="text/css"></style> <script type="text/javascript"> //参数数字数组 function bubble(arr){//检查参数if(toString.call(arr) !== "[object Array]"){ return false;}//获取数组长度var len = arr.length;if(len <= 1){//小于1不用排序 return arr;}//外层控制轮数for(var i=0;i<len;i++){ //标记是否有排序的元素 var mark = true; //内层对数组元素进行冒泡选择 for(var j=0;j<len-1-i;j++){//交互元素if(arr[j] > arr[j+1]){ mark = false; var temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp; } } if(mark){ //当没有进行冒泡选择时,证明已经排序好了return arr;}} } //测试 var ar = [9,3,7,4,8,2,5,1,6,0]; alert(bubble(ar)); </script></head><body></body></html>这里只是简单的介绍冒泡排序的工作原理,假如有时间,我再详细讲解一下另外三个排序,快速排序、选择排序、插入排序。