一、冒泡排序的原理(从小到大)

相邻两个数进行比较,如果前一个数大于后一个数,那么就交换,否则不交换

原理剖析

比如有一组含有6个数字的数:5、3、7、2、1、6
一共6个数字,做5次循环,每次循环相邻两个数都会进行一次比较。
 第一次循环:把最大的7放在了最后

第二次循环:7已经放在了最下面,不用再比较了。上面的重新排序把最大的6最后也就是放在了7的上面

 第三次循环:6、7已经放在最下面,不用再次比较。上面的重新排序把5放在了最后,也就是6、7的上面

第四次循环:5、6、7已经放在最下面,不用再次比较。上面的重新排序把3放在了最后面,也就是5、6、7的上面

第五次循环:3、5、6、7已经放在最下面,不用再次比较。上面的重新排序把2放在了最后面,也就是3、5、6、7的上面,1是最小的,放在2的前面,循环结束。

代码实现:

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>数组常用的方法</title>
</head>
<body>
<input type="button" value="测试" onclick="fn()" />
</body>
</html>
<script>
function fn(){
var arr=[5,3,7,2,1,6]; // 需要5轮,分别拿出剩下的数中的最大的,最后一个数,就不用管了。
for(var i=0;i<arr.length-1;i++){
// console.log("i",i);
for(var j=0;j<arr.length-1-i;j++){
// console.log("j",j);
if(arr[j]>arr[j+1]){
// 交换
var temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
console.log(arr);//[ 1, 2, 3, 5, 6, 7 ]
} fn();
</script>

二、选择排序的原理(从小到大)

要排序的数组 5,3,7,1,2,8
选择法排序的原理剖析:每次循环选择最小的数进行交换  
1、从第一个数到最后一个数里找出最小数,把最小数和第一个数进行交换 1,3,7,5,2,8
2、从第二个数到最后一个数里找出最小数,把最小数和第二个数进行交换 1,2,7,5,3,8
3、从第三个数到最后一个数里找出最小数,把最小数和第三个数进行交换 1,2,3,5,7,8
4、从第四个数到最后一个数里找出最小数,把最小数和第四个数进行交换 1,2,3,5,7,8
5、从第五个数到最后一个数里找出最小数,把最小数和第五个数进行交换 1,2,3,5,7,8

代码实现:

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>数组常用的方法</title>
</head>
<body>
<input type="button" value="测试" onclick="fn()" />
</body>
</html>
<script>
function fn(){
var arr=[5,3,7,1,2,8]; // 一共找出五个最小的数,最后一个不用管了,所以,六个数,循环5次。
for(var i=0;i<arr.length-1;i++){
// i=0
//1、找最小数
var min = arr[i];
var index = i;//index是最小数的下标
// 循环到底
for(var j=i+1;j<arr.length;j++){
if(arr[j]<min){
min = arr[j];
index = j;
}
}
//2、交换(数组中的最小数和arr[i])
var t = arr[i];
arr[i] = arr[index];
arr[index] = t;
}
console.log(arr);
} fn(); </script>

JavaScript中数组的两种排序方法详解(冒泡排序和选择排序)的更多相关文章

  1. JavaScript中数组的排序方法:1.冒泡排序 2.选择排序

      //1.选择排序: //从小到大排序:通过比较首先选出最小的数放在第一个位置上,然后在其余的数中选出次小数放在第二个位置上,依此类推,直到所有的数成为有序序列. var arr2=[19, 8, ...

  2. javascript中函数的四种调用模式详解

    介绍函数四种调用模式前,我们先来了解一下函数和方法的概念,其实函数和方法本质是一样,就是称呼不一样而已.函数:如果一个函数与任何对象关系,就称该函数为函数.方法:如果一个函数作为一个对象属性存在,我们 ...

  3. javascript中的字符串编码、字符串方法详解

    js中的字符串是一种类数组,采用UTF-16编码的Unicode字符集,意味字符串的每个字符可用下标方式获取,而每个字符串在内存中都是一个16位值组成的序列.js对字符串的各项操作均是在对16位值进行 ...

  4. servlet两种配置方法详解

     1.web.xml中Servlet的注解 <servlet> <!-- servlet的内部名称,自定义 --> <servlet-name>DemoAction ...

  5. 排序方法整理Java - 冒泡排序、选择排序、插入排序、快速排序

    /** * 排序方法整理 * @author zhyea * */ public class Sort { /** * 冒泡排序,从小到大. * 冒泡排序是比较相邻的两个元素,若顺序错误,则执行交换. ...

  6. javascript中的Base64.UTF8编码与解码详解

    javascript中的Base64.UTF8编码与解码详解 本文给大家介绍的是javascript中的Base64.UTF8编码与解码的函数源码分享以及使用范例,十分实用,推荐给小伙伴们,希望大家能 ...

  7. JavaScript中数组Array.sort()排序方法详解

    JavaScript中数组的sort()方法主要用于对数组的元素进行排序.其中,sort()方法有一个可选参数.但是,此参数必须是函数. 数组在调用sort()方法时,如果没有传参将按字母顺序(字符编 ...

  8. 【转载】JAVA中线程的两种实现方法-实现Runnable接口和继承Thread类

    转自: http://blog.csdn.net/sunguangran/article/details/6069317 非常感谢原作者,整理的这么详细. 在java中可有两种方式实现多线程,一种是继 ...

  9. HTML中label的两种使用方法

    如果您在 label 元素内点击文本,就会触发此控件.就是说,当用户选择该标签时,浏览器就会自动将焦点转到和标签相关的表单控件上. 有两种使用方法: 方法1: <label for=" ...

随机推荐

  1. php 防注入

    a. 打开magic_quotes_gpc或使用addslashes()函数 当php.ini里的 magic_quotes_gpc 为On 时. 提交的变量中所有的 ' (单引号), "  ...

  2. String的那些事

    目录 String的特点? String的构造方法? String的常用方法? String的特点? 通过查看String类的源码我们得知:String类被final关键字修饰,这即是说明String ...

  3. Excel表格转Json数据结构

    Excel表格转Json数据结构 辗转了好几个项目,每个项目的导表工具都巨难用,速度慢,潜规则多,扩展性差,不易于调试.Sqlite,Json,Lua,Xml各种格式都用过. 举个例子: 大多数导表工 ...

  4. 【TIJ4】第五章全部习题

    第五章习题 5.1 package ex0501; //[5.1]创建一个类,它包含一个未初始化的String引用.验证该引用被Java初始化成null class TestDefaultNull { ...

  5. M-Renamer方法名修改器,iOS项目方法名重构,Objective-C/Swift,代码模型预判,减少误改的机率,替换速度更快,可视化操作,傻瓜式操作,一键操作,引用处自动修改,马甲包的福音

    M-Renamer M-Renamer(Method-Name-Renamer)类方法名修改器,采用链式解析头文件,代码模型预判,减少误改的机率,替换速度更快:可以解析整个项目大多数类的方法,可视化操 ...

  6. 推荐几个来自 MOOCs的 Data Science

    数据科学是一个大领域,如果你想成为一个优秀的数据专家,自学是必要的技能. MOOCs是数据科学的主要来源.有许多网站提供了 MOOCs,比如Coursera.Coursera和Udacity都还不错. ...

  7. .net core 依赖注入, autofac 简单使用

    综述 ASP.NET Core  支持依赖注入, 也推荐使用依赖注入. 主要作用是用来降低代码之间的耦合度. 什么是控制反转? 控制反转(Inversion of Control,缩写为IoC),是面 ...

  8. SpringBoot(三)SpringBoot自动配置

    我们都知道SpringBoot帮助我们集成了许多组件和配置,那么SpringBoot是如何集成这些配置并在启动是自动进行配置呢.说到这就不得又需要回过头来看一下@SpringBootApplicati ...

  9. HTTP、TCP、IP协议面试题

    HTTP.TCP.IP协议基本定义 HTTP: (HyperText Transport Protocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,关于HTTP协议的详细内容请参考RFC2 ...

  10. MySQL笔记(9)-- 各种锁及实现

    一.背景 MySQL有两种类型的锁:lock(锁)和latch(闩锁): 类型 lock latch 对象 事务 线程 保护 数据库内容 内存数据结构 持续时间 整个事务 临界资源 模式 行锁.表锁. ...