5、数组(下)
1、数组里面存数组
var num1 = 10;
var str = "hello";
var isYes = true;
var arr1 = [10, 20, 30,[50, 60]];
var arr = [num1, str, isYes, arr1];
// alert(arr[3][2]);
// alert(arr[3][3][1]);
// alert(arr); //10,hello,true
// alert(arr[3]);
/*var tmpArr = arr[3];
alert(tmpArr);
alert(tmpArr[1]);
alert(arr[3][1])*/
【注】在数据中的元素,可以存储任意数据类型的数据。
2、二维数组 习题
通过循环按行顺序为一个5×5的二维数组a赋1到25的自然数,然后输出该数组的左下半三角。试编程。
1、声明数组arr 一共 五个元素 这五个元素都是数组
2、下标为0的这个元素 arr[0] = [1, 2, 3, 4, 5];
/* arr[0] = [1, 2, 3, 4, 5];
arr[1] = [6, 7, 8, 9, 10];
arr[2] = [11, 12, 13, 14, 15];
arr[3] = [16, 17, 18, 19, 20];
arr[4] = [21, 22, 23, 24, 25];
*/
var arr = [];
var tmp = 1; //用于累加的数 1 -> 25
for(var i = 0; i < 5; i++){
var newArr = [];
//给newArr填充五个数据
for(var j = 0; j < 5; j++){
newArr.push(tmp++);
}
arr.push(newArr);
//arr[[], [], [], [], []];
}
// alert(arr[0]);
for(var i = 0; i < arr.length; i++){
//1、分别输出每一个arr中元素,并换行
// document.write(arr[i]);
//2、将tmpArr中的每一个数输出
for(var j = 0; j < arr[i].length; j++){
if(j <= i){
document.write(arr[i][j] + " ");
}
}
document.write("<br />");
}
/*
1、求数组中所有元素的和;
2、让数组中的元素交换位置(重要) arr[1] arr[3]交换值;
3、求数组的最大数和最小数(重要) max min
4、求数组的最小数的下标(重要)index
*/
var arr = [4, 5, 2, 3, 1];
var sum = 0;
for(var i = 0; i < arr.length; i++){
sum += arr[i];
}
// alert(sum);
var tmp = arr[1];
arr[1] = arr[3];
arr[3] = tmp;
// alert(arr); //1,2,5,4,3
// 最大数
var max = arr[0]; //假设第一个元素,最大
var min = arr[0]; //假设第一个元素,最小
var index = 0;
for(var i = 1; i < arr.length; i++){
/*if(arr[i] > max){
max = arr[i];
}*/
if(arr[i] < min){
min = arr[i];
index = i;
}
}
// alert(max);
alert(min);
alert(index);
3、排序
/*
reverse()
直接将原数组逆序。直接修改了原数组。
格式:数组.reverse();
*/
/*var arr = [30, 20, 10, 5, 50, 100];
arr.reverse();
alert(arr); //100,50,5,10,20,30*/
/*
sort()
排序
数组.sort(); 升序。
【注】不好用,默认是使用字符串排序。所以我们不用。
*/
/* var arr = [5, 4, 3, 7, 8, 9];
arr.sort();
alert(arr); //3,4,5,7,8,9*/
var arr = [5, 15, 10, 1];
arr.sort();
alert(arr); //1,10,15,5
4、冒泡法
/*
数据结构:数据排序算法。
冒泡排序
选择排序(固定写法)
*/
/*
冒泡排序的思路:
思路:输入6个无序的数字,从头到尾依次比较相邻两个数字大小,若大数在前、小数在后,则交换两数位置,依次比较,使全部数据按从小到大排列。
一共有6个数,比较5轮。
第一轮: 5次
9, 8, 7, 6, 5, 4
8, 9, 7, 6, 5, 4
8, 7, 9, 6, 5, 4
8, 7, 6, 9, 5, 4
8, 7, 6, 5, 9, 4
8, 7, 6, 5, 4, 9
第二轮: 4次
8, 7, 6, 5, 4
7, 8, 6, 5, 4
7, 6, 8, 5, 4
7, 6, 5, 8, 4
7, 6, 5, 4, 8
第三轮:3次
7, 6, 5, 4
6, 7, 5, 4
6, 5, 7, 4
6, 5, 4, 7
第四轮: 2次
6, 5, 4
5, 6, 4
5, 4, 6
第五轮:1次
5, 4
4, 5
*/
var arr = [9, 8, 7, 6, 5, 4];
// 冒泡排序
//1、确定比较多少轮 = 数组长度 - 1;
for(var i = 0; i < arr.length - 1; i++){
//2、这一轮比较的次数 = 数组长度 - 当前轮数(i + 1);
for(j = 0; j < arr.length - (i + 1); j++){
if(arr[j] > arr[j + 1]){
//交换两个数的位置
var tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
alert(arr); //4,5,6,7,8,9
5、选择排序
/*
选择排序
打擂台法:
将每一个擂台拿出来,跟后面所有的元素,进行比较,符合交换条件,交换位置。
第一轮: 五次
9, 8, 7, 6, 5, 4
8, 9, 7, 6, 5, 4
7, 9, 8, 6, 5, 4
6, 9, 8, 7, 5, 4
5, 9, 8, 7, 6, 4
4, 9, 8, 7, 6, 5
第二轮: 四次
9, 8, 7, 6, 5
8, 9, 7, 6, 5
7, 9, 8, 6, 5
6, 9, 8, 7, 5
5, 9, 8, 7, 6
第三轮: 三次
9, 8, 7, 6
8, 9, 7, 6
7, 9, 8, 6
6, 9, 8, 7
第四轮: 二次
9, 8, 7
8, 9, 7
7, 9, 8
第五轮: 一次
9, 8
8, 9
【注】选择,自己尝试编写。
*/
var arr = [9, 8, 7, 6, 5, 4];
for(var i = 0; i < arr.length - 1; i++){
for(var j = i + 1; j < arr.length; j++){
if(arr[i] > arr[j]){
var tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
alert(arr); //4,5,6,7,8,9
6、join
/*
功能:将数组 => 字符串
将数组中的元素拼接成字符串
格式:数组.join("字符串");
值:拼接成的字符串
不改变原数组
*/
var arr = [1, 2, 3, 4, 5];
var str = arr.join("+");
// alert(str);//1+2+3+4+5
/*
1、随机给出一个五位以内的数,然后输出该数共有多少位,每位分别是什么
*/
var num = 12345;
/*
将数字num的每一位取出。
*/
var arr = []; //用来存储取下来的每一位。
while(1){
if(num == 0){
break;
}
//个位如何取
arr.push(num % 10);
num = parseInt(num / 10);
}
arr.reverse();
alert(arr.length);
7、join进阶
/*
功能:将数组 => 字符串 将数组中的元素拼接成字符串
格式:数组.join("字符串");
值:拼接成的字符串
*/
var arr = [1, 2, 3, 4, 5];
var str = arr.join("+");
// alert(str);//1+2+3+4+5
/*
1、随机给出一个五位以内的数,然后输出该数共有多少位,每位分别是什么
*/
var num = 12345;
/*
将数字num的每一位取出。
*/
var arr = []; //用来存储取下来的每一位。
while(num){
//个位如何取
arr.push(num % 10);
num = parseInt(num / 10);
}
arr.reverse();
alert(arr.length);