javascript-几个基础的排序算法
对这几个基础排序算法进行梳理,便于以后查看。
/**
*
* 冒泡排序
* 从末尾开始相邻两数相互比较大小,满足条件就交换位置。循环每进行一次,即可确定第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-几个基础的排序算法的更多相关文章
- JavaScript版几种常见排序算法
今天发现一篇文章讲“JavaScript版几种常见排序算法”,看着不错,推荐一下原文:http://www.w3cfuns.com/blog-5456021-5404137.html 算法描述: * ...
- JavaScript实现的9大排序算法
笔试面试经常涉及各种算法,本文简要介绍常用的一些算法,并用JavaScript实现. 1.插入排序 1)算法简介 插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法.它的工作原 ...
- 学习经典算法—JavaScript篇(一)排序算法
前端攻城狮--学习常用的排序算法 一.冒泡排序 优点: 所有排序中最简单的,易于理解: 缺点: 时间复杂度O(n^2),平均来说是最差的一种排序方式: 因为在默认情况下,对于已经排好序的部分,此排序任 ...
- JavaScript实现的7种排序算法
所谓排序算法,即通过特定的算法因式将一组或多组数据按照既定模式进行重新排序.这种新序列遵循着一定的规则,体现出一定的规律,因此,经处理后的数据便于筛选和计算,大大提高了计算效率.对于排序,我们首先要求 ...
- python基础===八大排序算法的 Python 实现
本文用Python实现了插入排序.希尔排序.冒泡排序.快速排序.直接选择排序.堆排序.归并排序.基数排序. 1.插入排序 描述 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一 ...
- C#_基础:排序算法
//希尔排序 static int[] ShellSort(int[] array) { if (array != null) { int[] list = { 9, 5, 3, 2, 1 }; fo ...
- 记一下JavaScript的几种排序算法
零.写在最前 排序的方法有很多种,这篇文章只是记录我熟悉的算法: 我发现了一个关于排序算法很有趣的网站,把相关的算法演示做成了动画,有兴趣的同学可以看看! 附上SortAnimate网站链接:http ...
- 【C++】排序算法小结
1.计数排序 如果给定上下界,并且区间不大的话,最适用. 比如对于英文字母数组进行排序. 时间复杂度O(n),空间复杂度O(n) void countSort(int A[], int n, int ...
- C语言实现常用排序算法——插入排序
插入排序是最基础的排序算法,原理: 首先1个元素肯定是有序的,所以插入排序从第二个元素开始遍历:内循环首先请求一个空间保存待插入元素,从当前元素向数组起始位置反向遍历:当发现有大于待插入元素的元素,则 ...
随机推荐
- 万维网发布服务(w3svc)已停止,除非万维网发布服务(w3svc)正在运行。
近来遇到一个IIS服务启动问题,重启服务器PC后,网站启动的时候,提示“ 万维网发布服务(w3svc)已停止,除非万维网发布服务(w3svc)正在运行”. 解决方法: 点击"开始" ...
- 容器 SET part2
(6) insert STL中为什么提供这样的set的insert呢? 这个成员函数存在的目的是为了插入效率的问题.函数参数中的 __position 只是一个提示值,表示在这个位置附近(可前可后 ...
- C++ 的多重继承
不能够从对象访问基类的公开方法,真悲剧!只能在类里面提供公共函数! void Mentor::GetInfo(){ cout<<endl<<name<<endl&l ...
- div 居中进行总结
1.margin:auto ;让元素居中,需要确定元素的宽度,并且需要是块元素 eg: div { width:200px; height:200px; background:#222; margin ...
- ActionBar +Tab+ViewPager +Fragment 支持侧滑动完成办税工具的页面展示
1:fragment_zhqrl.xml(征期日历) <?xml version="1.0" encoding="utf-8"?> <Line ...
- HTTP协议细节
一]客服端 --> 服务端 1>结构 a)请求行 b)请求头 c)请求体:请求的内容,如果没有,就是空白 ...
- android手机端保存xml数据
1.前面写的这个不能继续插入数据,今天补上,当文件不存在的时候就创建,存在就直接往里面添加数据. 2.代码如下: <pre name="code" class="j ...
- ural 1017. Staircases
http://acm.timus.ru/problem.aspx?space=1&num=1017 #include <cstdio> #include <cstring&g ...
- POJ 1225 Substrings
http://poj.org/problem?id=1226 题意:给定n个串.求一个最长的串,使得这个串或者其反串在每个串中都出现过? 思路:先在大串里面加入正反串,然后二分,判定即可. #incl ...
- Codeforces 429B Working out
http://codeforces.com/contest/429/problem/B 题意:一个从左下到右上,一个从左上到右下,要求只相交一次,求整个路径和的最大值 思路:发现可以枚举交点,然后算到 ...