js数组案例

数组的常用方法(原理)

本文将介绍数组的常用法,包括求最大(小)数,首尾元素交换位置,以及数组元素反转,三种简单排序,数组元素去重和数组元素随机排列。

找数组中的最大(小)数

首先,定义了一个数组 list = [100,30,50,180,70,28,50];和变量max(min),假设变量max(min)的值为数组中的第一个元素,即max(min)=a[0];然后将max(min)与数组元素进行比较,当找到比max(min)大(小)的元素时,重新给max(min)赋值,直至数组中的所有元素都与之比较晚,打印max(min)的值。
代码如下:

function max(arr) {//求最大数
        var max = 0;
        for (var i = 0; i < arr.length; i++) {
            if (arr[i] > max) {
                max = arr[i];
            }
        }
        return max;
    }

数组首尾元素交换位置

首先,确定数组长度,因为数组的下标取值从0开始,值数组长度-1为止,所以,首尾元素交换位置实际上是二者交换;
代码如下:

 function changeFL(arr) {//首位数值调换
        var i;
        i = arr[0];
        arr[0] = arr[arr.length - 1];
        arr[arr.length - 1] = i;
        document.write(arr);
    }

由此可以引申出数组元素反向的方法。

数组元素反向

由上面可知,数组元素交换位置实际上是值的交换,首尾交换的元素下标不变,分别为0和。length-1,由此,我们可以对整个数组元素下标进行分析,0 , 1 , 2 ,3 ,4 , 5 ,6;位置0与位置6进行交换,位置1与位置5进行交换,位置2与位置4进行交换,位置3不变,那么我们可以发现,首先,我们需要判断元素长度的奇偶,为奇数时,我们要找到中间值,然后对其他所有元素成对的进行交换;为偶数时,我们可直接对所有元素成对交换。
代码如下:

 function reverse(arr) {//数组反向
        var i, j;
        if (arr.length % 2 == 0) {
            for (i = 0; i <= parseInt(arr.length / 2 - 1); i++) {
                for (j = arr.length - 1; j > parseInt((arr.length - 1) / 2); j--) {
                    var k;
                    if ((i + j) == (arr.length - 1)) {
                        k = arr[j];
                        arr[j] = arr[i];
                        arr[i] = k;
                    }
                }
            }
            document.write(arr);
        } else {
            for (i = 0; i <= parseInt(arr.length / 2) - 1; i++) {
                for (j = arr.length - 1; j > parseInt(arr.length / 2); j--) {
                    var k;
                    if ((i + j) == arr.length - 1) {
                        k = arr[j];
                        arr[j] = arr[i];
                        arr[i] = k;
                    }
                }
            }
            document.write(arr);
        }
    }

三种简单排序

冒泡排序

冒泡排序的原理在每次循环结束时,将最大(小)数放置于数组末尾,然后下次循环只比较到倒数第二个数为止,以此类推,最后得到一个按升序(降序)排列的数组。
代码如下:

function sort(arr) {//排序 从小到大 冒泡
        var i, j, k;
        for (i = 0; i < arr.length - 1; i++) {
            for (j = 0; j < arr.length - 1 - i; j++) {
                if (arr[j] > arr[j + 1]) {
                    k = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = k;
                }
            }
        }
        document.write(arr);
    }

选择排序

选择排序与冒泡排序类似,都是按数组排列由左至右依次比较,区别在于选择排序需要定义一个max(min),将之与数组中的元素一次比较,将最大(小)数放在数组前面,代码如下:

function choose(arr) {//排序 选择
        for (var i = 0; i < arr.length; i++) {
            min = arr[i];
            for (var j = i; j < arr.length; j++) {
                if (min > arr[j]) {
                    min = arr[j];
                    arr[j] = arr[i];
                    arr[i] = arr[j];
                }
            }
        }
        document.write(arr);
    }

快速排序

快速排序的核心在于选取数组的中间元素,左右元素与之比较,分出左右区间,类似于二叉树的生成,然后递归调用,直至左右区间数组长度小于等于1。
代码如下:

function fastSort(arr) {//快速排序
        if (arr.length <= 1) {
            return arr;
        }
        var left = [];
        var right = [];
        var middle = arr.splice(parseInt(arr.length / 2), 1);
        for (i = 0; i < arr.length; i++) {
            // if (arr[i] != middle) {
                if (arr[i] >= middle) {
                    right[right.length] = arr[i];
                } else if (arr[i] < middle) {
                    left[left.length] = arr[i];
                }
        }
        return fastSort(left).concat(middle, fastSort(right));
    }

数组元素去重

 function noRepeat(arr) {//过滤重复数
        var i, j, k = 0;
        c = [];
        for (i = 0; i < arr.length - 1; i++) {
            for (j = i + 1; j < arr.length; j++) {
                if (arr[i] == arr[j]) {
                    arr[j] = undefined;
                }
            }
        }
        for (i = 0; i < arr.length; i++) {
            if (arr[i] == undefined) {
                continue;
            } else {
                c[c.length] = arr[i];
            }
        }
        document.write(c);

    }

数组元素随机排列

已知一个数组,要求随机生成五个数,并且他们不重复

    function randomNumber(arr) {//随机生成五个随机数,要求不重复
        var k = parseInt(Math.random() * 5);
        for (var i = 0; i < 5; i++) {
            if (k == arr[i]) {
                d[d.length] = arr[i];
                arr[i] = undefined;
            }
        }
        if (d.length <= 4) {
            randomNumber(arr);
        } else {
            document.write(d);
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值