韩顺平_轻松搞定网页设计(html+css+javascript)_第28讲_js二维数组_js冒泡排序_二分查找_学习笔记_源代码图解_PPT文档整理
2012-12-06 11:06
1441 查看
文西马龙:http://blog.csdn.net/wenximalong/
一维数组——小结
①数组可存放任意类型的数据
②数组大小不必事先指定,可以动态增长
③数组名可以理解为指向数组首地址的引用
arr=[45,90,0];
document.writeln(arr); //则输出 45 90 0
④数组元素从0开始编号的
多维数组——二维数组
多维数组我们只介绍二维数组,一维数组的元素还可以是一个数组,就构成了二维数组。
①实例
var arr=[["shunping",123,4.5],["a","b","c"]]
demo1.html
②分析
思考:如何访问"b",arr[0][2]又是多少?如何遍历二维数组?
③案例,请用二维数组输出如下图形
0 0 0 0 0 0
0 0 1 0 0 0
0 2 0 3 0 0
0 0 0 0 0 0
如何遍历二维数组
demo2.html
思考题:请将下面的矩形转置,并打印在页面
1 2 3 4 5
6 7 8 9 10
1 6 9 6 9
2 5 3 2 6
0 1 3 5 8
2 4 6 8
8 9 0 -1
9 6 2 1
加强对二维数组的认识,转置矩阵
矩阵转置:行和列交换
demo3.html
js基本语法——排序
排序的介绍
排序是将一组数据,依指定的顺序进行排列的过程。
排序的分类:
(交换式排序,选择式排序和插入式排序)
排序(Sorting)是数据处里中一种很重要的运算,同时也是很常用的运算,一般数据处里工作25%的事件都在进行排序。简单的说,排序就是把一组记录(元素)按照某个域的值的递增(即由小到大)或递减(即由大到小)的次序重新排列的过程。
交换式排序法
交换式排序属于内部排序法,是运用数据值比较后,依判断规则对数据位置进行交换,以达到排序的目的。
交换式排序法又可分为两种:
1.冒泡排序法(Bubble sort)
2.快速排序法(Quick sort)
交换式排序法——冒泡排序法
冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从后向前(从下标较大的元素开始),依次比较相邻元素的排序码,若发现逆序则交换,使排序码较小的元素逐渐从后部移向前部(从下标较大的单元移向下标较小的单元),就像水底下的气泡一样逐渐向上冒。
因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在排序过程中设置一个标志flag判断元素是否进行过比较,从而减少不必要的比较。
下图演示了一个冒泡过程的例子:
按道理,9个数据应该排8次,上面的例子是优化过的。
第一轮定一个数
demo4.html
排序后的结果:
改进:当if一句一次都没有进来,则说明已经是有序的了,则无需再去执行排序
最外层循环6次,如果不加标志位,9个数应该外层循环8次,当数据量很大的时候,节省的时间就明显了,优化过的冒泡排序。
demo5.html
js基本语法——查找
我们常用的查找有两种
(1)顺序查找(一个一个的比对)
(2)二分查找
二分查找是经常在笔试和面试中会遇到的题
★二分查找的前提:
该数组是有序的,如果不是有序的数组,则不能使用二分查找
demo6.html
看注释,比较详细
韩顺平_php从入门到精通_视频教程_学习笔记_源代码图解_PPT文档整理_目录
一维数组——小结
①数组可存放任意类型的数据
②数组大小不必事先指定,可以动态增长
③数组名可以理解为指向数组首地址的引用
arr=[45,90,0];
document.writeln(arr); //则输出 45 90 0
④数组元素从0开始编号的
多维数组——二维数组
多维数组我们只介绍二维数组,一维数组的元素还可以是一个数组,就构成了二维数组。
①实例
var arr=[["shunping",123,4.5],["a","b","c"]]
demo1.html
<html> <head> <script language="javascript"> var arr=[["shunping",123,4.5],["a","b","c"]]; //遍历 for(var i=0;i<arr.length;i++){ //输出一行(二维数组一个元素[数组]) for(var j=0;j<arr[i].length;j++){ document.writeln(arr[i][j]+" "); } document.writeln("<br/>"); } //如果需要直接访问"c" window.alert(arr[1][2]); </script> </head> <body></body> </html>
②分析
思考:如何访问"b",arr[0][2]又是多少?如何遍历二维数组?
③案例,请用二维数组输出如下图形
0 0 0 0 0 0
0 0 1 0 0 0
0 2 0 3 0 0
0 0 0 0 0 0
如何遍历二维数组
demo2.html
<html> <head> <script> var arr=[[0,0,0,0,0,0],[0,0,1,0,0,0],[0,2,0,3,0,0],[0,0,0,0,0,0]]; for(var i=0;i<arr.length;i++){ //遍历每一个具体的值 for(var j=0;j<arr[i].length;j++){ document.writeln(arr[i][j]+" "); } document.writeln("<br/>"); } </script> </head> <body></body> </html>
思考题:请将下面的矩形转置,并打印在页面
1 2 3 4 5
6 7 8 9 10
1 6 9 6 9
2 5 3 2 6
0 1 3 5 8
2 4 6 8
8 9 0 -1
9 6 2 1
加强对二维数组的认识,转置矩阵
矩阵转置:行和列交换
demo3.html
<html> <head> <script language="javascript"> var arr=[[2,4,6,8],[8,9,0,-1],[9,6,2,1]]; //对上面的数组转置(转置就是行列互换) var arr_new=[]; //javascript的数组可以动态增长 for(var i-0;i<arr.length;i++){ //遍历每个具体的值 for(var j=0;k<arr[i].length;j++){ } } </script> </head> <body></body> </html>先放下
js基本语法——排序
排序的介绍
排序是将一组数据,依指定的顺序进行排列的过程。
排序的分类:
(交换式排序,选择式排序和插入式排序)
排序(Sorting)是数据处里中一种很重要的运算,同时也是很常用的运算,一般数据处里工作25%的事件都在进行排序。简单的说,排序就是把一组记录(元素)按照某个域的值的递增(即由小到大)或递减(即由大到小)的次序重新排列的过程。
交换式排序法
交换式排序属于内部排序法,是运用数据值比较后,依判断规则对数据位置进行交换,以达到排序的目的。
交换式排序法又可分为两种:
1.冒泡排序法(Bubble sort)
2.快速排序法(Quick sort)
交换式排序法——冒泡排序法
冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从后向前(从下标较大的元素开始),依次比较相邻元素的排序码,若发现逆序则交换,使排序码较小的元素逐渐从后部移向前部(从下标较大的单元移向下标较小的单元),就像水底下的气泡一样逐渐向上冒。
因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在排序过程中设置一个标志flag判断元素是否进行过比较,从而减少不必要的比较。
下图演示了一个冒泡过程的例子:
按道理,9个数据应该排8次,上面的例子是优化过的。
第一轮定一个数
demo4.html
<html> <head> <script language="javascript"> var arr=[79,56,90,4,32,27,16,88,35]; //大的排序次数(arr.length-1) //为什么要arr.length-1。假如是9个数,第一趟就把最大的数固定了,第二趟就把第二大的数固定了,每排一趟就固定了一个大数,第八趟就固定了第八大的数,9个数8个位置都已经定下来了,那么剩下的数就是最小的数(第九大的数),所以就不用再排了,9个数,只需要排8趟,n个数,只需n-1趟 //for(var i=1;i<=arr.length-1;i++)从1开始计数,更容易理解些 for(var i=0;i<arr.length-1;i++){ //小的排序,不停两两交换,为什么要减i,因为每定义一个大数,后面的两两交换循环就减少一次。假设为9个数,如第一趟,i=0,两两循环的次数为arr.length-1,8次;第二趟,i=1,两两交换循环的次数就为arr.length-1-1,7次,因为已经把最大的数固定了,就相当于剩下的8个数参与排序,7次两两交换。 for(var j=0;j<arr.length-1-i;j++){ if(arr[j]>arr[j+1]){ //交换,小数排在前面,大数向后排 var temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } } for(var i=0;i<arr.length;i++){ document.writeln(arr[i]+" "); } </script> </head> <body></body> </html>
排序后的结果:
改进:当if一句一次都没有进来,则说明已经是有序的了,则无需再去执行排序
最外层循环6次,如果不加标志位,9个数应该外层循环8次,当数据量很大的时候,节省的时间就明显了,优化过的冒泡排序。
demo5.html
<html> <head> <script language="javascript"> var arr=[79,56,90,4,32,27,16,88,35]; //默认为false,没有进去 var flag=false; for(var i=0;i<arr.length-1;i++){ //输出打印,看在加了标志位后,大循环了几次 document.writeln("大循环...<br/>"); for(var j=0;j<arr.length-1-i;j++){ //当if一句一次都没有进来,则说明已经是有序的了,则无需再去执行排序 if(arr[j]>arr[j+1]){ //交换,小数排在前面,大数向后排 var temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; //进来一次就设为true,表明交换过一次了 flag=true; } } if(flag){ //如果为真,就说明交换过,再重新置为false flag=false; }else{ break; //如果为假,则说明一次交换过都没有,if语句没有进入过,说明是有序的了,无需再排序了,直接break } } for(var i=0;i<arr.length;i++){ document.writeln(arr[i]+" "); } </script> </head> <body></body> </html>
js基本语法——查找
我们常用的查找有两种
(1)顺序查找(一个一个的比对)
(2)二分查找
二分查找是经常在笔试和面试中会遇到的题
★二分查找的前提:
该数组是有序的,如果不是有序的数组,则不能使用二分查找
demo6.html
<html> <head> <script language="javascript"> var arr=[1,4,6,8,9,90,800]; //思路:找到数组的中间数(midVal),和你要查找的数(findval)进行比较,如果mindVal>findVal,则说明findVal在数组的左边,就把该数组二分(就只在左边查找) function binarySearch(arr,findVal,leftIndex,rightIndex){ //前提,防止递归是无穷递归 if(leftIndex>rightIndex){ //提示找不到,错位了 document.writeln("找不到"); return; } //首先要找到中间这个值 //在javascript中,两个整数相除,如果有余数,不会自动截断,所以要处里。Math.floor()方法:对一个数进行下取舍 var midIndex=Math.floor((leftIndex+rightIndex)/2); var midVal=arr[midIndex]; //比较 if(midVal>findVal){ //再左边找,要用到递归了, //数组是引用传递,还是原来的数组 //为什么midIndex-1,因为midVal=arr[midIndex],已经比较过了,减1,就指向紧邻的左边的一个数,把它当做新的midVal binarySearch(arr,findVal,leftIndex,midIndex-1); }else if(midVal<findVal){ //在右边找 //midIndex+1,midIndex已经比较过了,把midIndex+1作为新的左边 binarySearch(arr,findVal,midIndex+1,rightIndex); }else{ document.writeln("找到 下标为"+midIndex); return; } } //测试 //数组的最左边0,最右边arr.length-1 binarySearch(arr,1,0,arr.length-1); </script> </head> <body></body> </html>
看注释,比较详细
韩顺平_php从入门到精通_视频教程_学习笔记_源代码图解_PPT文档整理_目录
相关文章推荐
- 韩顺平_轻松搞定网页设计(html+css+javascript)_第29讲_二维数组转置_js面向对象编程介绍 类(原型对象)和对象_学习笔记_源代码图解_PPT文档整理
- 韩顺平_轻松搞定网页设计(html+css+javascript)_第22讲_js三大流程控制(顺序流程、分支控制、循环控制)_学习笔记_源代码图解_PPT文档整理
- 韩顺平_轻松搞定网页设计(html+css+javascript)_第24讲_js案例讲解_js自定义函数_学习笔记_源代码图解_PPT文档整理
- 韩顺平_轻松搞定网页设计(html+css+javascript)_第26讲_js函数调用过程内存分析_js函数细节_学习笔记_源代码图解_PPT文档整理
- 韩顺平_轻松搞定网页设计(html+css+javascript)_第19讲_js运行原理_js开发工具介绍_js程序(hello)_js基本语法_学习笔记_源代码图解_PPT文档整理
- 韩顺平_轻松搞定网页设计(html+css+javascript)_第20讲_js基本数据类型_js运算符1_学习笔记_源代码图解_PPT文档整理
- 韩顺平_轻松搞定网页设计(html+css+javascript)_第24讲_js案例讲解_js自定义函数_学习笔记_源代码图解_PPT文档整理
- 韩顺平_轻松搞定网页设计(html+css+javascript)_第23讲_js三大流程控制(顺序流程、分支控制、循环控制)_js调式技巧_学习笔记_源代码图解_PPT文档整理
- 韩顺平_轻松搞定网页设计(html+css+javascript)_第27讲_js一维数组_一维数组细节_学习笔记_源代码图解_PPT文档整理
- 韩顺平_轻松搞定网页设计(html+css+javascript)_第21讲_js运算符2_js移位运算_学习笔记_源代码图解_PPT文档整理
- 韩顺平_轻松搞定网页设计(html+css+javascript)_第25讲_js系统函数_js函数调用方式_学习笔记_源代码图解_PPT文档整理
- 韩顺平_轻松搞定网页设计(html+css+javascript)_第34讲_js超级玛丽小游戏_学习笔记_源代码图解_PPT文档整理
- 韩顺平_轻松搞定网页设计(html+css+javascript)_ 第18讲_js课程介绍_js基本介绍_学习笔记_源代码图解_PPT文档整理
- 韩顺平_轻松搞定网页设计(html+css+javascript)_第30讲_类和对象细节_创建对象的几种方式_js对象内存分析_学习笔记_源代码图解_PPT文档整理
- 韩顺平_轻松搞定网页设计(html+css+javascript)_第32讲_构造函数_成员函数详解_学习笔记_源代码图解_PPT文档整理
- 韩顺平_轻松搞定网页设计(html+css+javascript)_第31讲_this关键字详解_学习笔记_源代码图解_PPT文档整理
- 韩顺平_轻松搞定网页设计(html+css+javascript)_第33讲_Object类_闭包_成员函数再说明_聪明的猪小练习_学习笔记_源代码图解_PPT文档整理
- 韩顺平_php从入门到精通_视频教程_第11讲_初识css_类选择器_id选择器_html选择器_学习笔记_源代码图解_PPT文档整理
- 韩顺平_php从入门到精通_视频教程_第17讲_div-css作业评讲③_学习笔记_源代码图解_PPT文档整理
- 韩顺平_php从入门到精通_视频教程_第1讲_html介绍_html运行原理①_学习笔记_源代码图解_PPT文档整理