对这几个基础排序算法进行梳理,便于以后查看。

/**
*
* 冒泡排序
* 从末尾开始相邻两数相互比较大小,满足条件就交换位置。循环每进行一次,即可确定第i位数的值。
*冒泡排序的时间复杂度为O(n^2)。
*
*/
function bubbleSort(arr){
if(arr == null || arr.length == 0) return;
for(var i =0 ; i < arr.length-1 ;i++){ //比较n-1次即可
for(var j = arr.length-1 ; j>i ;j--){
if(arr[j] < arr[j-1]){ var temp = arr[j];
arr[j] = arr[j-1];
arr[j-1] = temp;
}
}
}
console.log(arr);
} /**
*
*选择排序
*第i次循环,将arr[i]与后面的数比较,用它后面最小的数和它交换。
*选择排序的时间复杂度为O(n^2)
*/
function selectSort(arr){
if(arr == null || arr.length == 0) return;
for(var i = 0 ; i < arr.length-1 ;i++){
var minIndex = i;
for(var j = i + 1; j < arr.length ; j++){
if(arr[minIndex] > arr[j]){
minIndex = j;
}
}
if(minIndex !== i){
var temp = arr[minIndex];
arr[minIndex] = arr[i];
arr[i] = temp; }
}
console.log(arr);
} /**
*
*插入排序
*以第一个数为参照,将第i个数拿出,对第i个数前面的数整理好顺序后,将arr[i]插入正确位置。
*简单插入排序的时间复杂度也是O(n^2)。
*/ function insterSort(arr){
if(arr == null || arr.length == 0) return;
for(var i = 1; i < arr.length ; i++){
var j = i;
var target = arr[i]; //插入值
while(j > 0 && target < arr[j-1] ){
arr[j] = arr[j-1];
j --;
}
arr[j] = target;
}
console.log(arr);
}
/*
var a = [15,8,14,2,6];
insterSort(a);
运行过程
i = 1 8 15 14 2 6
i = 2 8 14 15 2 6
i = 3 target = 2
数组变化过程: 8 14 15 15 6
8 14 14 15 6
8 8 14 15 6
arr[0] = target 插入
2 8 14 15 6 i = 4 .....
*/ /**
*快速排序
*这是阮一峰的版本,很直观,感觉写得相当棒!
* (1)在数据集之中,选择一个元素作为"基准"(pivot)。
*
*  (2)所有小于"基准"的元素,都移到"基准"的左边;所有大于"基准"的元素,都移到"基准"的右
* 边。
*
*  (3)对"基准"左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素* 为止。
* 快速排序是不稳定的,其时间平均时间复杂度是O(nlgn)。
*/
var quickSort = function(arr) {if (arr.length <= 1) { return arr; }
var pivotIndex = Math.floor(arr.length / 2);
var pivot = arr.splice(pivotIndex, 1)[0];
var left = [];
var right =[];
for(var i = 0; i < arr.length; i++){
if(arr[i] < pivot){
left.push(arr[i]);
}else{
right.push(arr[i]);
}
}
return quickSort(left).concat([pivot], quickSort(right));
} //快排还有一种更简便的写法 function quicksort(arr)
{
if (arr.length == 0)
return []; var left = new Array();
var right = new Array();
var pivot = arr[0]; for (var i = 1; i < arr.length; i++) {
if (arr[i] < pivot) {
left.push(arr[i]);
} else {
right.push(arr[i]);
}
} return quicksort(left).concat(pivot, quicksort(right));
}

javascript-几个基础的排序算法的更多相关文章

  1. JavaScript版几种常见排序算法

    今天发现一篇文章讲“JavaScript版几种常见排序算法”,看着不错,推荐一下原文:http://www.w3cfuns.com/blog-5456021-5404137.html 算法描述: * ...

  2. JavaScript实现的9大排序算法

    笔试面试经常涉及各种算法,本文简要介绍常用的一些算法,并用JavaScript实现. 1.插入排序 1)算法简介 插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法.它的工作原 ...

  3. 学习经典算法—JavaScript篇(一)排序算法

    前端攻城狮--学习常用的排序算法 一.冒泡排序 优点: 所有排序中最简单的,易于理解: 缺点: 时间复杂度O(n^2),平均来说是最差的一种排序方式: 因为在默认情况下,对于已经排好序的部分,此排序任 ...

  4. JavaScript实现的7种排序算法

    所谓排序算法,即通过特定的算法因式将一组或多组数据按照既定模式进行重新排序.这种新序列遵循着一定的规则,体现出一定的规律,因此,经处理后的数据便于筛选和计算,大大提高了计算效率.对于排序,我们首先要求 ...

  5. python基础===八大排序算法的 Python 实现

    本文用Python实现了插入排序.希尔排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序. 1.插入排序 描述 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一 ...

  6. C#_基础:排序算法

    //希尔排序 static int[] ShellSort(int[] array) { if (array != null) { int[] list = { 9, 5, 3, 2, 1 }; fo ...

  7. 记一下JavaScript的几种排序算法

    零.写在最前 排序的方法有很多种,这篇文章只是记录我熟悉的算法: 我发现了一个关于排序算法很有趣的网站,把相关的算法演示做成了动画,有兴趣的同学可以看看! 附上SortAnimate网站链接:http ...

  8. 【C++】排序算法小结

    1.计数排序 如果给定上下界,并且区间不大的话,最适用. 比如对于英文字母数组进行排序. 时间复杂度O(n),空间复杂度O(n) void countSort(int A[], int n, int ...

  9. C语言实现常用排序算法——插入排序

    插入排序是最基础的排序算法,原理: 首先1个元素肯定是有序的,所以插入排序从第二个元素开始遍历:内循环首先请求一个空间保存待插入元素,从当前元素向数组起始位置反向遍历:当发现有大于待插入元素的元素,则 ...

随机推荐

  1. HTML&CSS基础学习笔记1-简单网页中有哪些标签?

    一个简单网页中有哪些HTML标签? 平时我们看到的网页,都是由HTML的标签来组成的.HTML标签非常多,我们先来认识一部分. 1. <html></html>称为根标签,所有 ...

  2. bzoj 2075: [POI2004]KAG

    整天鬼畜题搞搞,感觉药丸…… 这种题出到xjoi模拟题里,太神了…… 这题的核心在于分割Cograph,尝试把Cograph的合成过程给求出来. 我们将这张图中的边为黑边,在这张图的补图中出现的边为白 ...

  3. windows mongodb 安装

    window平台一下所有命令 务必以管理员身份运行 且在window系统命令行下,如git bash不可以 具体以管理员身份运行的快捷键是 1. win+x 2. shift + a 设置文件存储目录 ...

  4. Powershell创建对象

    .Net类型中的方法功能很强大.可以通过类型的构造函数创建新的对象,也可以将已存在的对象转换成指定的类型. 通过New-Object创建新对象 如果使用构造函数创建一个指定类型的实例对象,该类型必须至 ...

  5. 关于iostream的效率问题

    前言    经常有人说iostream的速度慢,IO流比stdio的慢多了.但是有人测试过的,iostream的速度是超过stdio的. 测试结果 /* C */#include <stdio. ...

  6. 8.1 Optimization Overview

    8.1 Optimization Overview 8.1 Optimization Overview 8.2 Optimizing SQL Statements 8.3 Optimization a ...

  7. 用copy只能复制文件,用xcopy却说参数错误?

    dos里面没有复制文件夹这一个命令,这是个复合的命令,是由新建文件夹和将原文件夹里的东西全部复制进去两步组成的.就像剪贴一样,是先建立文件,然后再删除源文件.这是一种复合型的操作. 复制文件夹: 1. ...

  8. C#中dynamic、ExpandoObject 的正确用法

    原文地址:http://www.cnblogs.com/qiuweiguo/archive/2011/08/03/2125982.html dynamic是FrameWork4.0的新特性.dynam ...

  9. ssh秘钥交换详解与实现 diffie-hellman-group-exchange-sha

    ssh的DH秘钥交换是一套复合几种算法的秘钥交换算法.在RFC4419中称为diffie-hellman-groupX-exchange-shaX 的算法(也有另一种单纯的 rsaX-shaX 交换算 ...

  10. git术语解释staging,index,cache

    当我在使用git的时候,有三个东西的出现,一度让我非常困扰,就如题所述,staging,index,和cache. 比如,当我阅读git官网提供的电子书<Pro Git>的时候,最初一章里 ...