• 冒泡排序


    冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复以上过程,仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到最大数前的一对相邻数,将小数放前,大数放后,第二趟结束,在倒数第二个数中得到一个新的最大数。如此下去,直至最终完成排序。

    由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。

    用二重循环实现,外循环变量设为i,内循环变量设为j。外循环重复9次,内循环依次重复9,8,...,1次。每次进行比较的两个元素都是与内循环j有关的,它们可以分别用a[j]和a[j+1]标识,i的值依次为1,2,...,9,对于每一个i, j的值依次为1,2,...10-i。

            var bubbleSort = function(array){
              for(var i=0,n=array.length;i<n;i++){
                for (var j = 0; j < n - i - 1; j++){//比如一共有五个泡泡,那么每趟为
                  var a = array[j],b= array[j+1];//0V1,1V2,2V3,3V4
                  if (a > b){                    //0V1,1V2,2V3
                    array[j] = b;                //0V1,1V2
                    array[j+1] = a;              //0V1
                  }
                }
              }
            }
    

            var bubbleSort2 = function(array){
              for(var i=0,n=array.length;i<n-1;i++){
                for (var j = n-1; j > i; j--){//比如一共有五个泡泡,那么每趟为
                  var a = array[j],b= array[j-1]//4V3,3V2,2V1,1V0
                  if (a < b){                   //4V3,3V2,2V1
                    array[j] = b                //4V3,4V2
                    array[j-1] = a              //4V3
                  }
                }
              }
            }
    

    //这个不是冒泡排序,因为不是比较相邻的元素
            var exchangeSort = function(array){
              for (var i = 0,n=array.length; i < n; i++) { 
                for (var j = n - 1; j > i; j--) { //比如一共有五个元素,那么每趟为
                  if (array[i] > array[j]) {        //0V4,0V3,0V2,0V1
                    array[i] = array[j] + array[i]; //1V4,1V3,1V2
                    array[j] = array[i] - array[j]; //2V4,2V3
                    array[i] = array[i] - array[j]; //3V4
                  } 
                } 
              }
            }
    

    加入一个布尔,如果排好序就不用继续空循环

            var bubbleSort = function(array){
              for(var i=0,n=array.length;i<n;i++){
                var swap = false;
                for (var j = 0; j < n - i - 1; j++){//比如一共有五个泡泡,那么每趟为;
                  if (array[j] > array[j + 1]){  //0V1,1V2,2V3,3V4
                    array[j + 1] ^= array[j];    //0V1,1V2,2V3
                    array[j] ^= array[j + 1];    //0V1,1V2
                    array[j + 1] ^= array[j];    //0V1
                    swap = true;
                  }
                }
                if (!swap) break;
              }
            }
    

  • 相关阅读:
    MySQL update && select ,update的同时select,和for update 语句说再见。
    宋体文件C#读取CSV文件java教程
    输入格式邮箱验证格式
    状态集合[Python]Socket高级 select I/O复用模型(二)
    运行下载运行google play闪退的解决办法java教程
    Hibernate查询
    Hibernare 的基本介绍
    Hibernate详细配置
    人工智能能力提升指导总结
    如何根据普通ip地址获取当前地理位置
  • 原文地址:https://www.cnblogs.com/rubylouvre/p/1650509.html
Copyright © 2020-2023  润新知