这是一篇Js的知识点的总结也可以叫做笔记。就是说有可能有的朋友不需要,有可能有的朋友需要,所以我就记录一下,这也是丰富本人的知识经验而写。
1、我们首先了解冒泡排序的思想。
1》冒泡排序:是一种计算机科学领域的较简单的排序方法。
2》思路:冒泡排序算法的运作如下:(从前到后) 比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
2、冒泡排序
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JavaScript的冒泡/插入/自执行函数</title>
</head>
<body>
<!--这是引入JS;charset是语言编码格式-->
<script type="text/javascript" charset="UTF-8">
/*
Bubble sort (冒泡排序)
@arrayObject 是要传入的数组,就是要排序的对象
*/
function bubbleSort(arrayObject) {
/*
1.创建三个对象arrayLength/i和j.
arrayLength: 表示数组的长度.
i:表示比较的轮数
j:表示每轮要比较的次数
*/
var arrayLength= arrayObject.length,i,j;
/*
开始进行比较
*/
for (i=0;i<arrayLength;i++){
/*
1.进行比较相邻两个元素的大小
2.arrayLength-i: 表示是每轮比较的次数,例如:
var arr = [4,3,6,1,5];
分析:
第一轮比较 1:4
第一次:4>3 ——>[3,4,6,1,5]
第二次:4>6 ——>[3,4,6,1,5]
第三次:6>1 ——>[3,4,1,6,5]
第四次:6>5 ——>[3,4,1,5,6]
第二轮比较 2:3
第一次:3>4 ——>[3,4,1,5,6]
第二次:4>1 ——>[3,1,4,5,6]
第三次:4>5 ——>[3,1,4,5,6]
第三轮比较 3:2
第一次:3>1——>[1,3,4,5,6]
第二次:3>4——>[1,3,4,5,6]
第四轮比较 4:1
第一次:1>3——>[1,3,4,5,6];
注释: 从以上轮次我们可以看出,比较的轮次和每轮次数的关系
*/
for (j=0;j<arrayLength-i;j++){
if (arrayObject[j]>arrayObject[j+1]){
/* 创建一个中间替换变量*/
var temp = arrayObject[j];
arrayObject[j] = arrayObject[j+1];
arrayObject[j+1] = temp;
}
}
}
/* 返回排序好的数组*/
return arrayObject;
}
/*
我们开始测试,上述我们写的方法
1.创建一个要排序的数组
*/
var arrayNumber = [23,2,14,4,56];
/* 我们调用冒泡排序的函数.并输出*/
console.log(bubbleSort(arrayNumber));
/*
1.上述输出
[2, 4, 14, 23, 56]
*/
</script>
</body>
</html>
3、插入排序
<script type="text/javascript" charset="UTF-8">
/*
1.插入排序的思想
插入排序的基本思想是:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,
直到全部插入完为止。
2.插入排序的步骤过程
直接插入排序的算法思路:
(1) 设置监视哨r[0],将待插入纪录的值赋值给r[0];
(2) 设置开始查找的位置j;
(3) 在数组中进行搜索,搜索中将第j个纪录后移,直至r[0].key≥r[j].key为止;
(4) 将r[0]插入r[j+1]的位置上。
*/
/*
首先了解几个知识点
1>> push()
1.push(): 方法可以向数组的末尾添加一个或者多个元素,并返回数组长度.
2.push()的语法
arrayObject.push(newelement1,newelement2,....,newelementX)
参数 描述
newelement1 必需。要添加到数组的第一个元素。
newelement2 可选。要添加到数组的第二个元素。
newelementX 可选。可添加多个元素。
返回值
把指定的值添加到数组后的新长度。
3.说明
push() 方法可把它的参数顺序添加到 arrayObject 的尾部。它直接修改 arrayObject,而不是创建一个新的数组。
push() 方法和 pop() 方法使用数组提供的先进后出栈的功能。
4.提示和注释
注释:该方法会改变数组的长度。
提示:要想数组的开头添加一个或多个元素,请使用 unshift() 方法。
2>>shift()
1.shift():方法用于把数组的第一个元素从其中删除,并返回第一个元素的值。
2.shift()的语法
arrayObject.shift()
返回值
数组原来的第一个元素的值。
3.说明
如果数组是空的,那么 shift() 方法将不进行任何操作,返回 undefined 值。
请注意,该方法不创建新数组,而是直接修改原有的 arrayObject。
4.提示和注释
注释:该方法会改变数组的长度。
提示:要删除并返回数组的最后一个元素,请使用 pop() 方法。
3>> unshift():方法可向数组的开头添加一个或更多元素,并返回新的长度。
1.unshift()的语法
arrayObject.unshift(newelement1,newelement2,....,newelementX)
参数 描述
newelement1 必需。向数组添加的第一个元素。
newelement2 可选。向数组添加的第二个元素。
newelementX 可选。可添加若干个元素。
返回值
2.说明
unshift() 方法将把它的参数插入 arrayObject 的头部,并将已经存在的元素顺次地移到较高的下标处,以便留出空间。
该方法的第一个参数将成为数组的新元素 0,如果还有第二个参数,它将成为新的元素 1,以此类推。请注意,unshift()
方法不创建新的创建,而是直接修改原有的数组。
3.提示和注释
注释:该方法会改变数组的长度。
注释:unshift() 方法无法在 Internet Explorer 中正确地工作!
提示:要把一个或多个元素添加到数组的尾部,请使用 push() 方法。
4>>splice()
1.splice():方法向/从数组中添加/删除项目,然后返回被删除的项目。
注释:该方法会改变原始数组。
2.语法
arrayObject.splice(index,howmany,item1,.....,itemX)
参数 描述
index 必需。整数,规定添加/删除项目的位置,使用负数可从数组结尾处规定位置。
howmany 必需。要删除的项目数量。如果设置为 0,则不会删除项目。
item1, ..., itemX 可选。向数组添加的新项目。
返回值
类型 描述
Array 包含被删除项目的新数组,如果有的话。
3.说明
splice() 方法可删除从 index 处开始的零个或多个元素,并且用参数列表中声明的一个或多个值来替换那些被删除的元素。
如果从 arrayObject 中删除了元素,则返回的是含有被删除的元素的数组。
4. 提示和注释
注释:请注意,splice() 方法与 slice() 方法的作用是不同的,splice() 方法会直接对数组进行修改。
*/
function insertionSort(arrayObject) {
/*
创建一个存储数组
*/
var tempArray = [];
/*
我们要向tempArray 中添加第一个元素
*/
tempArray.push(arrayObject.shift());
/*
注释:
arrayObject.shift() 后,我们传入的数组就发生变化,shift()改变了原数组.请看知识点.
现在 arrayObject 的第一个元素别截取调,从新创建一个新的数组.
*/
/*
创建两个参数
1. i : 表示arrayObject的元素索引
2. j : 表示tempArray的元素索引
*/
var i,j;
for (i=0;i<arrayObject.length;i++){
for (j=0;j<tempArray.length;j++){
/*
1. 从arrayObject中,拿出第一个元素和tempArray 中的所有元素相比
*/
if (arrayObject[i]>tempArray[j]){
/* 进行多种情况处理*/
/* 判断最后,的情况,就是最后,也没有找到比自己大的数,那就将其追加到tempArray的最后*/
if (j==tempArray.length-1|| tempArray.length==1){
tempArray.push(arrayObject[i]);
break;
}
}else {
/* 多种情况的处理*/
/* 首先判断tempArray现在里面有几个元素*/
if(tempArray.length==1||j==0){
/* 将其添加到tempArray的第一个*/
tempArray.unshift(arrayObject[i]);
/* 终止本次循环*/
break;
}else {
/* 就是tempArray的元素个数不为1时候,我们就是要实现出插入处理*/
tempArray.splice(j,0,arrayObject[i]);
/* 警告的注释:splice(j,0,arrayObject[i])中的j,不能想成tempArray的元素索引.
这里是元素在tempArray中的位置*/
break;
}
}
}
}
/* 返回处理好的数组*/
return tempArray;
}
/* 我们进行测试*/
var insertArrayNumber = [23,12,3,45,1,456];
/* 调用函数*/
console.log(insertionSort(insertArrayNumber));
/*
结果:
[1,3,12,23,45,456]
*/
</script>
4、自执行函数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>自执行函数</title>
</head>
<body>
<script type="text/javascript" charset="UTF-8">
// 第一种:最前最后加括号
(function () {
alert('第一种自执行函数');
}());
// 第二种:function外面加括号
(function () {
alert('第二种自执行函数');
})();
// 第三种:function 前面加运算符,常见的是 ! 和 void,+
// ! 号
!function () {
alert('第三种自执行函数');
}();
// 运算符
+function () {
alert('第五种自执行函数');
}();
// void
void function () {
alert('第四种自执行函数');
}();
// 注释: 推荐第一种写法
</script>
</body>
</html>