javascript中五种常见的排序之冒泡排序

1、冒泡排序

  冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。如果两个元素相等,是不会再交换的。

  数组中有 N 个数,比较每相邻两个数,如果前者大于后者,就把两个数交换位置。

  第一轮就可以选出一个最大的数放在最后面;

  第二轮选出前N-1个数中最大的数放在N-1位置上;

  第三轮...

  那么经过 n-1(数组的 length - 1) 轮,就完成了所有数的排序。

  这样就理解为什么外层for循环里 i<length-1,因为循环n-1次;

  内层for循环是第i次循环的时候,数组后面已经固定了i个数值,不需要再和其比较,故length-1-i;

  冒泡排序总的平均时间复杂度为O(n^2);

  javascript版代码如下:

  

 1 var bubbleSort = function(arr){
 2
 3         for(var i = 0;i<arr.length-1;i++){
 4             for(var j = 0;j<arr.length-1-i;j++){
 5                 if(arr[j]>arr[j+1]){
 6                     var k = arr[j];
 7                     arr[j] = arr[j+1];
 8                     arr[j+1] = k;
 9                 }
10             }
11         }
12         console.log(arr);
13
14     }
15     bubbleSort([2,5,6,3,4,6,64,34,69]);

原文地址:https://www.cnblogs.com/kongVv/p/11260369.html

时间: 2024-10-18 15:12:41

javascript中五种常见的排序之冒泡排序的相关文章

javascript中五种常见的DOM方法

getElementById将返回一个与那个有着给定id属性值的元素节点对应的对象. <html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>无标题文档</title></head>

php中五种常见的设计模式

设计模式 一书将设计模式引入软件社区,该书的作者是 Erich Gamma.Richard Helm.Ralph Johnson 和 John Vlissides Design(俗称 “四人帮”).所介绍的设计模式背后的核心概念非常简单.经过多年的软件开发实践,Gamma 等人发现了某些具有固定设计的模式,就像建筑师设计房子和建筑物一样,可以为浴室的位置或厨房的构造方式开发模板.使用这些模板或者说设计模式 意味着可以更快地设计更好的建筑物.同样的概念也适用于软件. 设计模式不仅代表着更快开发健壮

javascript中两种基本常用排序算法分析

备注:内容大部分从网上复制,代码为自己手写.仅做知识的温故知新,并非原创. 1.冒泡排序(Bubble Sort) (1)算法描述 冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端. (2)算法描述和实现 具体算法描述如下: <1>.比较相邻的元素.如果第一个比第二个大,就交换它们两个: &l

Linux中五种常见的I/O模型

一般来说,程序进行输入操作有两步:等.搬迁 . 在Linux下,共有五种I/O模型,下面就逐一介绍: 1>.阻塞I/O(使用比较广) 应用程序调用一个I/O函数,如果数据木有准备好,就会导致应用程序阻塞,直到数据准备好了,从内核拷贝到用户空间(进程的缓存),I/O函数返回成功. 如一个进程调用recvform,然后系统调用并不返回直到有数据包到达本地系统,然后完成数据拷贝. 2>.非阻塞I/O(极浪费CPU资源,不常使用) 我们把一个套接口设置为非阻塞,就是告诉内核,当请求的I/O操作无法完成

Java中几种常见的排序方式

冒泡排序是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端. 代码 /**   * 冒泡法排序<br/> * <li>比较相邻的元素.如果第一个比第二个大,就交换他们两个.</li>   * <li>对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点

JavaScript版几种常见排序算法

今天发现一篇文章讲“JavaScript版几种常见排序算法”,看着不错,推荐一下原文:http://www.w3cfuns.com/blog-5456021-5404137.html 算法描述: * 冒泡排序:最简单,也最慢,貌似长度小于7最优* 插入排序: 比冒泡快,比快速排序和希尔排序慢,较小数据有优势* 快速排序:这是一个非常快的排序方式,V8的sort方法就使用快速排序和插入排序的结合* 希尔排序:在非chrome下数组长度小于1000,希尔排序比快速更快* 系统方法:在forfox下系

java几种常见的排序算法总结

[java] view plain copy /*************几种常见的排序算法总结***************************/ package paixu; public class PaiXu { final int MAX=20; int num[]=new int[MAX]; { System.out.print("生成的随机数组是:"); for(int i=0;i<20;i++){ num[i]=(int)(Math.random()*100)

几种常见的排序算法

1.插入类排序 在一个已经有序的序列中,插入一个新的记录.有直接插入排序.折半插入排序.希尔排序. 插入类排序 直接插入排序 1 void InsertSort(int R[], int n) 2 { 3 int i, j; 4 int temp; 5 for (i = 1; i < n; ++i) 6 { 7 temp = R[i]; 8 j = i - 1; 9 while (j >= 0 && temp < R[j]) 10 { 11 R[j+1] = R[j];

Javascript中两种最通用的定义类的方法

在Javascript中,一切都是对象,包括函数.在Javascript中并没有真正的类,不能像C#,PHP等语言中用 class xxx来定义.但Javascript中提供了一种折中的方案:把对象定义描述为对象的配方(先看一下例子会比较容易理解).定义类的方法有很多种,这里有两中较为通用的方法,大家参考一下.这两种方法均可以解决 构造函数会重复生成函数,为每个对象都创建独立版本的函数的问题.解决了重复初始化函数和函数共享的问题??提示音:http://www.huiyi8.com/tishiy