zoukankan      html  css  js  c++  java
  • 排序算法-冒泡排序(javascript)

    思想:比较相邻两个,逆序就交换,每次排序将最大的‘下沉’或最小的‘上浮’。

    function bubbleSort(arr){
    	const len = arr.length;
    	let temp = 0;
    	for(let i=0;i<len-1;i++){
    		for(let j=0;j<len-i-1;j++){
    			if(arr[j]>arr[j+1]){
    				temp = arr[j];
    				arr[j] = arr[j+1];
    				arr[j+1] = temp;
    			}
    		}
    	}
    	return arr;
    }

    时间复杂度:

    最好情况:正序。只需要一趟排序,进行n-1次比较,不移动记录。

    最坏情况:逆序。只要n-1趟排序,比较次数为n^2/2,移动次数3n^2/2。

    所以时间复杂度为O(n^2)

    空间复杂度:

    只在两个记录交换位置时需要一个辅助空间做暂存记录,所以空间复杂度为O(1)

    特点:

    1、是稳定排序。

    2、可用于链式存储结构。

    3、移动记录次数较多,算法平均时间性能比直接插入排序差。当初始记录无序,n较大时,此算法不适合。

    附:改进后的冒泡

    每次得到两个值,最大和最小值。

    function bubbleSort(arr) {
        var low = 0;
        var high= arr.length-1; //设置变量的初始值
        var tmp,j;
        while(low<high){
            for(j=low;j<high;++j) //正向冒泡,找到最大
                if(arr[j]>arr[j+1]){
                    tmp=arr[j];arr[j]=arr[j+1];arr[j+1]=tmp;
                }
            --high;                 //high前移一位
            for(j=high;j>low;--j) //反向冒泡,找到最小
                if(arr[j]<arr[j-1]){
                    tmp=arr[j];arr[j]=arr[j-1];arr[j-1]=tmp;
                }
            ++low;                  //low后移一位
        }
        return arr;
    }
    

      

  • 相关阅读:
    JPA的一对多,多对多用法
    pg数据库中时间查询的方式
    DNS消息格式
    Netty之Java堆外内存扫盲贴
    Netty writeAndFlush() 流程与异步
    Netty之有效规避内存泄漏
    TCP状态变迁图
    TCP/IP详解--发送ACK和RST的场景
    TCP/IP详解--连接状态变迁图CLOSE_WAIT
    TCP中异常关闭链接的意义 异常关闭的情况
  • 原文地址:https://www.cnblogs.com/PeriHe/p/7968131.html
Copyright © 2011-2022 走看看