JavaScript中的冒泡排序和选择排序

一、冒泡排序:

相邻单位数据比较,从大到小排列,多次执行,完成排序

 1 var arr = [3,44,38,5,47,25,36,2,79,8,1];
 2     //定义循环次数,之前比较出的数值,不参与下一次的比较
 3     for(var j = 0; j <= (arr.lenght-1) - 1 ;j++){
 4         //上一次比较出的数值,不参与下一次循环
 5         for(var i = 0;i<= (arr.lenght-1) - 1;i++){
 6             //内层循环,每次循环比较一个最大值,然后交换位置
 7             if (arr[i] > arr[i + 1]){
 8                 var middle = 0;
 9                 middle = arr[i];
10                 arr[i] = arr[i + 1];
11                 arr[i + 1] = middle;
12
13             }
14         }
15     }
16     consle.log(arr);

二、选择排序:

用数组索引定位,找出最小的索引,与起始位置交换,多次执行,完成排序

 1     var arr = [3,44,38,5,47,25,36,2,79,8,1];
 2     //外层循环,实现排序循环次数,次数是单元个数 -1
 3     for (var j = 0;j <= (arr.length-1) -1; j++){
 4         //先默认起始位置就是最小值位置,存储起始位置的索引,也就是 j,之前的起始位置,不参与下一次循环
 5         var min = j;
 6         // 默认的最小值位置是当前循环的起始位置,是j,比较要从下一个位置开始,内层循环起始,是比较的起始位置+1开始循环
 7         for(var i = j+1; i <= arr.length-1 ; i++){
 8             //如果有单元的数值,小于存储的索引对应的数值
 9             if(arr[min] > arr[i]){
10                 min = i;
11             }
12         }
13         //内层循环执行完毕,存储的索引下标如果不是起始的索引j,就交换 min中存储的索引下标对应的数值 和 j索引下标应的数值
14         if(min != j){
15             var m = 0;
16             m = arr[j];
17             arr[j] = arr[min];
18             arr[min] = m;
19         }
20     }
21     console.log(arr);

三、总结
1、选择排序:

  如果发生大小顺序问题,只是做赋值索引的操作

  等循环完成,执行判断,做一次数据交换

2、冒泡排序:
  每次发生大小顺序问题,都要执行数据交换操作

  执行数据交换的次数,高于选择排序

  执行数据交换的操作比较繁琐,执行次数过多,执行效率低

原文地址:https://www.cnblogs.com/karl-kidd/p/12544195.html

时间: 2024-10-12 04:39:04

JavaScript中的冒泡排序和选择排序的相关文章

JavaScript算法(冒泡排序、选择排序与插入排序)

冒泡排序.选择排序与插入排序复杂度都是指数级别的,放在一起说吧. 介绍一些学习这三个排序方法的比较好的资料.冒泡排序看<学习JavaScript数据结构与算法>介绍的冒泡排序,选择排序看<计算机科学概论(第三版)>里介绍的选择排序,插入排序看<计算机科学概论(第11版)>里介绍的插入排序, 通过这三份资料弄明白实现原理之后,最后看<学习JavaScript数据结构与算法>一书里的JS实现代码. 嗯,这本书里都有现成代码,就不在这儿写了,关键是弄清楚原理,然后

JS中的冒泡排序与选择排序

1.冒泡排序 作为最简单的排序算法之一,冒泡排序的思想是,从左到右依次比较两个存储数据的大小,如果第一个数大于第二个数,就交换两个数据,这样一轮比较之后,最大的数会放在后面,这样,每次循环比较,本轮中的最大值都会排到最后,直到循环结束,实现数组升序. 动图演示如下: 代码如下: 首先定义外层循环,如果有n个数据进行循环比较,最后一次循环排序,最后两个值的大小已经确定,所以最后一个数值不需要参与循环,即n-1次,这里就是(arr.length-1) -1次: 定义内层循环,当前位i和i+1进行比较

冒泡排序,选择排序,插入排序

从今天开始希望自己的博客可以持续的更新起来,由于本人能力有限,所以有些内容可能会有疏漏或者不全面,希望大家可以指出来,让我们一起学习,一起进步. 今天的内容是最简单的三个排序算法,冒泡排序,选择排序,插入排序,它们的时间复杂度都是O(N^2). 冒泡排序:首先第一个数与第二个数比较,如果前面的大于后面的就交换两个数,然后第二个与第三个比较,直到比较到最后,此时最后一个数为数组最大值,然后循环次步骤,第二次比较到倒数第二位,这样经过两次循环最后两位就排好了,经过N次循环,数组就拍好了 选择排序:从

java面向对象的冒泡排序,选择排序和插入排序的比较

这三种排序有俩个过程: 1.比较俩个数据. 2.交换俩个数据或复制其中一项. 这三种排序的时间级别 冒泡排序:比较 (N-1)+(N-2)+...+2+1 = N*(N-1)/2=N2/2 交换  0——N2/2 = N2/4 总时间 3/4*N2 选择排序:比较 (N-1)+(N-2)+...+2+1 = N*(N-1)/2=N2/2 交换  0——3*(N-1)=3*(N-1)/2=3/2*N 总时间 N2/2+3/2*N 插入排序:第一轮最多比较一次,第二轮最多比较俩次,最后一轮比较N-1

#排序算法#【1】概述、冒泡排序、选择排序

排序算法分类: 内部排序(在排序过程中不需要访问外存就可以完成排序) 外部排序 内部排序分类: 交换排序 冒泡排序 快速排序 选择排序 直接选择排序 堆排序 插入排序 直接插入排序 希尔排序 合并排序 外部排序: 常见的是多路归并算法,即将原文件分为多个能够一次装入内存一部分,分别把每一部分调入内存完成排序,然后对已经排序的子文件进行归并排序 冒泡排序法: 冒泡排序法是一种相邻数据交换的排序方法. 冒泡排序法的基本思想是:对待排序记录关键字从后往前(逆序)进行多遍扫描,当发现相邻两个关键字的次序

插入排序、冒泡排序、选择排序、希尔排序、快速排序、归并排序、堆排序和LST基数排序——C++实现

首先是算法实现文件Sort.h,代码如下: /* * 实现了八个常用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 * 以及快速排序.归并排序.堆排序和LST基数排序 * @author gkh178 */ #include <iostream> template<class T> void swap_value(T &a, T &b) { T temp = a; a = b; b = temp; } //插入排序:时间复杂度o(n^2) template<

黑马程序员——冒泡排序和选择排序——熟悉又陌生的排序方法

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 昨天做基础测试题,遇到了个排序问题,写完后脑子里突然跳出了“冒泡排序法”这个名词.“冒泡排序法”和“选择排序法”是每个程序初学者都会学到的两个排序方法,但是好多人对这两个排序方法是既熟悉又陌生,熟悉是因为凡是遇到排序一般都会想到这两个方法,陌生是因为细细一想对这两个方法的原理和区别又不是很清楚.不较真还好,初学者一较真就很容易被这两个方法搞晕了,我当时也被这两个方法搞晕了,就又认认真真一步一步

冒泡排序,选择排序,快速排序

package com.hello; public class HelloJava { /** * 冒泡排序(通过一次一次的循环,根据相近两个值进行比较,将大的值往下移) * @author MR ZHANG * @param arr * @return */ public static void getBubbleSort(int[] arr){ for(int i = 1;i< arr.length-1;i++){ for(int j=0; j< arr.length-i;j++){ if

冒泡排序和选择排序

冒泡排序和选择排序是排序算法中比较简单和容易实现的算法.冒泡排序的思想为:每一次排序过程,通过相邻元素的交换,将当前没有排好序中的最大(小)移到数组的最右(左)端.而选择排序的思想也很直观:每一次排序过程,我们获取当前没有排好序中的最大(小)的元素和数组最右(左)端的元素交换,循环这个过程即可实现对整个数组排序. 选择排序的平均时间复杂度比冒泡排序的稍低:同样数据的情况下,2种算法的循环次数是一样的,但选择排序只有0到1次交换,而冒泡排序只有0到n次交换.   1.冒泡法:这是最原始,也是众所周