由C语言联想到的:三重for循环实现对二维数组的按列排序,并且牵扯到数据结构。
自己写的,水平有限,本文属于原创,可能存在错误,忘指正~
function circle() { var a = [ [1, 4, 3, 2], [8, 6, 5, 7], [3, 7, 2, 5], [4, 8, 6, 1] ], t = 0, i, j, k; for(i = 0;i < 4;i++) { for(j = 0;j < 3;j++) { for(k = j + 1;k < 4;k++) { if(a[j][i] > a[k][i]) { t = a[j][i]; a[j][i] = a[k][i]; a[k][i] = t; } } } } console.log('对角线上元素的值为:'); for(i = 0;i < 4;i++) { console.log(a[i][i]); // 输出对角线上的元素值 } console.log("排序后的元素:"); for(i = 0;i < 4;i++) { var link = '{'; for(j = 0;j < 4;j++) { link += a[i][j]; if(j < 3) link += ',' } console.log(link + '}'); } } circle();
运行结果:
内部循环的原理是利用选择法:
1. 首先顺序执行for循环,执行到最里面的那个循环之后,一直循环最里面的那个循环,然后跳入从内到外的倒数第二个循环中,一直循环。这时候,数组的第一行第一个元素与其余所有行的第一个元素进行了比较,把剩余的最小的依次放到前面。
2. 以此类推,直到所有每一行的第一个元素的排序是从小到大的
按照数组下标进行比对就是:
a[0][0] >(此处是进行比较) a[1][0] a[2][0] a[3][0]
a[1][0] >(...同上) a[2][0] a[3][0]
a[2][0] >(...) a[3][0]
Chrome浏览器加断点,很容易大家去调试:【在你想调试的代码前面点一下,出现蓝色的标签,然后刷新一下页面,点击单步执行,就可以看到程序执行和相应的变量的变化了!】
3.跳入最外层循环, i加1
比较的下标为:
a[j][i] >(...) a[k][i]
01 11 21 31
11 21 31
21 31
02 12 22 32
12 22
22 32
03 13 23 33
13 23
23 33
-------------------------这是分割线--------------------------------