排序算法的实现之Javascript(常用)
排序算法的实现之Javascript
话不多说,直接代码。
1.冒泡排序
1、依次比较相邻的两个数,如果前一个比后一个大,则交换两者的位置,否则位置不变
2、按照第一步的方法重复操作前length-1的数字,直到最后一个数
图形示例

代码如下:
function bubbleSort(nums) {
var key = 0;
for (var i = 0; i < nums.length - 1; i++) {
for (var j = i + 1; j < nums.length; j++) {
if (nums[i] > nums[j]) {
key = nums[i];
nums[i] = nums[j];
nums[j] = key;
}
}
}
return nums;
}
2.选择排序
1、依次找出最小的数,和前面的数交换位置
图形示例

代码如下:
function select(nums){
var item =0;
for(var i = 0;i<nums.length-1;i++){
var min = i; //把最小索引给min
for(var j = i+1;j<nums.length;j++){
if(nums[min] > nums[j]) { //对比,如果最小索引的vlaue大于其他value,则将该索引给min
min = j
}
}
item = nums[min]; //最小索引给他
nums[min] = nums[i];
nums[i] = item;
}
return nums;
}
3、快速排序
1、找到中间的那个数作为基准,遍历数组,把小于基准的数放在left数组中,大于基准的数放在right数组中
2、再按同样的方法,对这两个数组进行排序
3、递归
图形示例:

代码如下:
var quickSort = function(nums) {
if (nums.length <= 1) return nums;
var pivotIndex = Math.floor(nums.length / 2);
var pivot = nums.splice(pivotIndex, 1)[0]; //splice返回的是一个数组,所以用[0]取出来
var left = [];
var right = [];
for (var i = 0; i < nums.length; i++) {
if (nums[i] < pivot) {
left.push(nums[i]);
} else {
right.push(nums[i]);
}
}
return quickSort(left).concat(pivot, quickSort(right)); //使用递归完成快排
}
4、插入排序
1、把一个数组分为【已排序】和【未排序】两部分,设定第一个数【已排序】,其余为【未排序】
2、从【未排序】中抽出第一个数,依次向前和【已排序】部分比较,如果比抽出的数大,则继续向前比较,否则插入后一个点
图形示例:

代码如下:
function insertionSort(nums) {
var i,j,value;
var len = nums.length;
for(i = 0;i<len;i++){
value = nums[i];
for(j = i-1;j>=0&&nums[j]>value;j--){
nums[j+1] = nums[j]; //向后移一位
}
nums[j+1] = value;
}
return nums
}
排序算法的实现之Javascript(常用)的更多相关文章
- Python学习(三) 八大排序算法的实现(下)
本文Python实现了插入排序.基数排序.希尔排序.冒泡排序.高速排序.直接选择排序.堆排序.归并排序的后面四种. 上篇:Python学习(三) 八大排序算法的实现(上) 1.高速排序 描写叙述 通过 ...
- Javascript十大排序算法的实现方法
上一篇中,实现了Javascript中的冒泡排序方法,下面把剩余的九种排序算法实现 选择排序: var array = []; for(var i=0;i<100000;i++){ var x ...
- 排序算法的实现(归并,快排,堆排,希尔排序 O(N*log(N)))
今天跟着左老师的视频,理解了四种复杂度为 O(N*log(N))的排序算法,以前也理解过过程,今天根据实际的代码,感觉基本的算法还是很简单的,只是自己写的时候可能一些边界条件,循环控制条件把握不好. ...
- python排序算法的实现-插入
1.算法: 设有一组关键字{ K 1 , K 2 ,…, K n }:排序开始就认为 K 1 是一个有序序列:让 K 2 插入上述表长为 1 的有序序列,使之成为一个表长为 2 的有序序列:然后让 K ...
- 排序算法的实现(C/C++实现)
存档: #include <iostream> #include <stdlib.h> #include <sort.h> #define maxsize 20 u ...
- 各类排序算法的实现C#版
using System;using System.CodeDom;using System.Collections.Generic;using System.Linq;using System.Ru ...
- 一起学Hadoop——二次排序算法的实现
二次排序,从字面上可以理解为在对key排序的基础上对key所对应的值value排序,也叫辅助排序.一般情况下,MapReduce框架只对key排序,而不对key所对应的值排序,因此value的排序经常 ...
- 基于python的几种排序算法的实现
#!usr/bin/python3 # -*- coding: utf-8 -*- # @Time : 2019/3/28 10:26 # @Author : Yosef-夜雨声烦 # @Email ...
- Python之基本排序算法的实现
import cProfile import random class SortAlgorithm: def __init__(self,unsortedlist=[]): self.unsorted ...
随机推荐
- Mongodb 查询优化(慢查询Profiling)
开启慢查询Profiling Profiling级别说明 0:关闭,不收集任何数据. 1:收集慢查询数据,默认是100毫秒. 2:收集所有数据 1.通过修改配置文件开启Profiling 修改启动mo ...
- 二十.Nginx反向代理、Nginx的TCP/UDP调度器、Nginx常见问题处理
proxy client web1 web2 1.nginx反向代理 使用Nginx实现Web反向代理功能,实现如下功能: 后端Web服务器两台(web1 192.168.2.100 web2 ...
- Mokia 摩基亚
题目链接:[https://www.luogu.com.cn/problem/P4390] 快捷版题意: 维护一个\(W*W\)的矩阵,初始值均为\(S\).每次操作可以增加某格子的权值,或询问某子矩 ...
- Elasticsearch-head使用及ES相关概念
elasticsearch-head安装和介绍已在上一篇讲了. 在浏览器访问http://localhost:9100,可看到如下界面,表示启动成功: 仔细观察,我们会发现客户端默认连接的是我们ela ...
- 【原创】go语言学习(三)字符串串、时间和日期类型
目录 1.字符串串原理理解析2. 时间类型3. 日期类型 字符串串原理理解析 1.字符串串底层就是⼀一个byte数组,所以可以和[]byte类型互相转换2.字符串串之中的字符是不不能修改的,那怎么修改 ...
- hadoop笔记-hdfs文件读写
概念 文件系统 磁盘进行读写的最小单位:数据块,文件系统构建于磁盘之上,文件系统的块大小是磁盘块的整数倍. 文件系统块一般为几千字节,磁盘块一般512字节. hdfs的block.pocket.chu ...
- phpstorm 2019.1 mac
链接:https://pan.baidu.com/s/10x0Oa24aOZHJYCYgUGe8yg 密码:muah 安装完成后, sudo vi /etc/hosts 添加以下内容到hosts 0 ...
- Semaphore信号量原理
package com.maven.info.semaphore; import java.util.ArrayList; import java.util.List; import java.uti ...
- Entity Framework 一个表多个外键关联另外一张表的相同主键
一. 报错 异常:System.Data.Entity.Infrastructure.DbUpdateException: 更新条目时出错.有关详细信息,请参阅内部异常. ---> System ...
- Redis学习(一) —— 基本使用与原理
一.数据结构 string Redis字符串是可修改字符串,在内存中以字节数组形式存在. 下面是string在源码中的定义,SDS(Simple Dynamic String) struct SDS& ...