经典数组问题:冒泡排序

1.题目:

给定一个数组,编写代码让其从小到大排序或从大到小排序(这里以从小到大为例) 。

2.思路:

取数组第一个数和索引,遍历数组,遇到比他小的则调换位置,将这个数置于数组第一位,然后用新的这个数继续遍历数组,以此将数组中最小数放于数组第一位;然后取数组第二个数和索引,使用相同方法获得第二小的数放在第二位;然后继续取数获得第三、第四。。。直到最大的一个数。

3.调换方法:

 一般情况下设置中间变量临时存值

                 temp=a

                 a=b

                 b=temp

但是有时也会要求不能产生中间变量(加减法---容易丢失值)

                a=a+b

                b=a-b

                a=a-b

(这里数组全为整数,以加减法为例)

4. 编写代码:

var arr=[5,6,2,4,7,8,1,11,3]

        for(var i=0;i<9;i++){

            for(var j=i+1;j<9;j++){

                if(arr[j]<arr[i]){

                    arr[j]=arr[j]+arr[i]

                    arr[i]=arr[j]-arr[i]

                    arr[j]=arr[j]-arr[i]

                }

            }

        }

        console.log(arr);

输出数据:1,2,3,4,5,6,7,8,11

一般到这里目的已经完成了,我们优化一下让代码更具有通用性,将循环最大值设为数组长度就行

for(var i=0;i<arr.length;i++){

            for(var j=i+1;j<arr.length;j++){

然后我们在继续优化一点,省略掉重复无意义的遍历就可以得到

var arr=[31,9,26,7,66,75,34,21]

        for(j=0;j<arr.length;j++){

        for(i=0;i<arr.length-j-1;i++){

            if (arr[i]>arr[i+1]) {

                arr[i]=arr[i]+arr[i+1]

                arr[i+1]=arr[i]-arr[i+1]

                arr[i]=arr[i]-arr[i+1]

            }

        }

    }

        console.log(arr);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值