zoukankan      html  css  js  c++  java
  • JavaScript实现冒泡排序

    一、冒泡排序简介:
    假设有一个数组a,我们想象成有一个班级名叫a班,现在全班随意排成一排,排头的位置是a[0],排尾的位置是a[a.length-1]。但高矮顺序不是有序的,我们想从矮到高排,排头最矮,排尾最高。

    下面是一种方法:
    第一轮:
    1、首先,排头和旁边的队员比较,如果比旁边队员高,两个人交换位置;不比旁边队员高,则不变。经过这第一次比较,可以肯定站在a[1]位置的肯定是a[0]、a[1]位置队员中较高的那一位;

    2、a[1]位置队员和a[2]位置队员比较,如果比a[2]位置队员高,两个人交换位置;不比a[2]位置队员高,则不变。经过这第二次比较,可以肯定站在a[2]位置的肯定是a[0]、a[1]、a[2]位置队员中最高的那一位;

    3、a[2]位置队员和a[3]位置队员比较,如果比a[3]位置队员高,两个人交换位置;不比a[3]位置队员高,则不变。经过这第三次比较,可以肯定站在a[3]位置的肯定是a[0]、a[1]、a[2]、a[3]位置队员中最高的那一位;

    ······

    直到a[a.length-2]位置队员和a[a.length-1]位置队员比较完成,这样的结果是,最高的那一位队员到了队尾的位置。

    说明:
    1、这有点像是“冒泡”的过程,称为冒泡排序还是比较形象的;就像老师说:“谁最高?排到队尾!”,但是眼睛看不准确,所以挨着挨着比较,第一轮之后最高的那个队员冒了出来,到了队尾的位置。

    2、上面叙述中用了“不比某队员高”的叙述方法,而不是“比某队员矮”的叙述方法,采用后一种叙述将漏掉两者一样高的情况。当两者一样高时,不用换位置。

    第二轮:
    重复第一轮的过程,只不过,现在不用比较到最后一个位置,因为第一轮已经知道他是最高的,只需要比较到倒数第二个位置即可。

    第三轮:
    重复第一轮的过程,只不过,现在不用比较到倒数第二个位置,因为第二轮已经知道他是第二高的,只需要比较到倒数第三个位置即可。
    ·····
    直到,只剩下排头的位置a[0]和旁边的位置a[1],这时a[2]位置已经是倒数第三高了,a[0]和a[1]再次比较,较高的排在a[1]位置,那么整个排序就已完成。
    这种排序的思想就是冒泡排序。
    二、用JavaScript实现冒泡排序

     function sort(arr) {
                var l=arr.length-1;
                var temp;
                while(l>0){
                    for (var j = 0; j < l; j++) {
                        if (arr[j]>arr[j+1]) {
                            temp=arr[j+1];
                            arr[j+1]=arr[j];
                            arr[j]=temp;
                        }   
                    }
                    l--;
                }
                return arr;
            }
            var a=[11,2,3,445,7,32,71,8,94];
            console.log(sort(a));
            var b=[94,11];
            console.log(sort(b));
    

    1、结束条件:
    当l=1时,还有a[0]位置和a[1]位置没比较,还可以比较一次;当l=0时,全部都比较过了,因此不用再比较;
    2、一个小陷阱:
    如果用change函数代替交换过程,即调用用以下函数

    function change(num1,num2){
    	var temp=num2;
    	num2=num1;
    	num1=temp;
    }
    

    代替如下部分:

    if (arr[j]>arr[j+1]) {
                            temp=arr[j+1];
                            arr[j+1]=arr[j];
                            arr[j]=temp;
                        }   
    ```不能实现正确的逻辑,因为调用change函数时,将arr[j]和arr[j+1]的值赋值给num1和num2变量,然后交换num1和num2变量,并未实现交换arr[j]和arr[j+1]。
    
    
    
    
    
    
  • 相关阅读:
    php pcntl 多进程学习
    php socket 学习
    linux 常用alias
    php 设置一个函数的最大运行时间
    QTableView 一列添加两个按钮
    翻译qmake文档 目录
    翻译qmake文档(四) Building Common Project Types
    算法时间复杂度
    翻译qmake文档(三) Creating Project Files
    Caliburn.Micro学习笔记目录
  • 原文地址:https://www.cnblogs.com/twodog/p/12134759.html
Copyright © 2011-2022 走看看