1.冒泡排序

  1. var bubbleSort = function (arr) {
  2. var flag = true;
  3. var len = arr.length;
  4. for (var i = 0; i < len - 1; i++) {
  5. flag = true;
  6. for (var j = 0; j < len - 1 - i; j++) {
  7. if (arr[j] > arr[j + 1]) {
  8. var temp = arr[j+1];
  9. arr[j+1] = arr[j];
  10. arr[j] = temp;
  11. flag = false;
  12. }
  13. }
  14. if (flag) {
  15. break;
  16. }
  17. }
  18. };

2.选择排序

  1. var selectSort = function (arr) {
  2. var min;
  3. for (var i = 0; i < arr.length-1; i++) {
  4. min = i;
  5. for (var j = i + 1; j < arr.length; j++) {
  6. if (arr[min] > arr[j]) {
  7. min = j;
  8. }
  9. }
  10. if (i != min) {
  11. swap(arr, i, min);
  12. }
  13. }
  14. };
  15. function swap(arr, index1, index2) {
  16. var temp = arr[index1];
  17. arr[index1] = arr[index2];
  18. arr[index2] = temp;
  19. };

3.插入排序

  1. var insertSort = function (arr) {
  2. var len = arr.length, key;
  3. for (var i = 1; i < len; i++) {
  4. var j = i;
  5. key = arr[j];
  6. while (--j > -1) {
  7. if (arr[j] > key) {
  8. arr[j + 1] = arr[j];
  9. } else {
  10. break;
  11. }
  12. }
  13. arr[j + 1] = key;
  14. }
  15. };

4.希尔排序

  1. var shellSort = function (arr) {
  2. var gaps = [5, 3, 1];
  3. for (var g = 0; g < gaps.length; ++g) {
  4. for (var i = gaps[g]; i < arr.length; ++i) {
  5. var temp = arr[i];
  6. for (var j = i; j >= gaps[g] && arr[j - gaps[g]] > temp; j -= gaps[g]) {
  7. arr[j] = arr[j - gaps[g]];
  8. }
  9. arr[j] = temp;
  10. }
  11. }
  12. };

5.归并排序

  1. function mergeSort(arr) {
  2. if (arr.length < 2) {
  3. return;
  4. }
  5. var step = 1;
  6. var left, right;
  7. while (step < arr.length) {
  8. left = 0;
  9. right = step;
  10. while (right + step <= arr.length) {
  11. mergeArrays(arr, left, left + step, right, right + step);
  12. left = right + step;
  13. right = left + step;
  14. }
  15. if (right < arr.length) {
  16. mergeArrays(arr, left, left + step, right, arr.length);
  17. }
  18. step *= 2;
  19. }
  20. }
  21. function mergeArrays(arr, startLeft, stopLeft, startRight, stopRight) {
  22. var rightArr = new Array(stopRight - startRight + 1);
  23. var leftArr = new Array(stopLeft - startLeft + 1);
  24. k = startRight;
  25. for (var i = 0; i < (rightArr.length - 1); ++i) {
  26. rightArr[i] = arr[k];
  27. ++k;
  28. }
  29. k = startLeft;
  30. for (var i = 0; i < (leftArr.length - 1); ++i) {
  31. leftArr[i] = arr[k];
  32. ++k;
  33. }
  34. rightArr[rightArr.length - 1] = Infinity; // 哨兵值
  35. leftArr[leftArr.length - 1] = Infinity; // 哨兵值
  36. var m = 0;
  37. var n = 0;
  38. for (var k = startLeft; k < stopRight; ++k) {
  39. if (leftArr[m] <= rightArr[n]) {
  40. arr[k] = leftArr[m];
  41. m++;
  42. }
  43. else {
  44. arr[k] = rightArr[n];
  45. n++;
  46. }
  47. }
  48. }

6.快速排序

  1. var quickSort = function(arr, left, right) {
  2. var i, j, t, pivot;
  3. if (left >= right) {
  4. return;
  5. }
  6. pivot = arr[left];
  7. i = left;
  8. j = right;
  9. while (i != j) {
  10. while (arr[j] >= pivot && i < j) {
  11. j--;
  12. }
  13. while (arr[i] <= pivot && i < j) {
  14. i++;
  15. }
  16. if (i < j) {
  17. t = arr[i];
  18. arr[i] = arr[j];
  19. arr[j] = t;
  20. }
  21. }
  22. arr[left] = arr[j];
  23. arr[j] = pivot;
  24. quickSort(arr, left, i - 1);
  25. quickSort(arr, i + 1, right);
  26. }

总结:算法效率比较:

排序方法 平均情况 最好情况 最坏情况
冒泡排序 O(n²) O(n) O(n²)
选择排序 O(n²) O(n²) O(n²)
插入排序 O(n²) O(n) O(n²)
希尔排序 O(nlogn)~O(n²) O(n^1.5) O(n²)
归并排序 O(nlogn) O(nlogn) O(nlogn)
快速排序 O(nlogn) O(nlogn) O(n²)
 
4

js实现各种常用排序算法的更多相关文章

  1. javascript常用排序算法实现

    毕业后,由于工作中很少需要自已去写一些排序,所以那些排序算法都忘得差不多了,不过排序是最基础的算法,还是不能落下啦,于是找了一些资料,然后用Javascript实现了一些常用的算法,具体代码如下: & ...

  2. Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法

    Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排 ...

  3. 转载部长一篇大作:常用排序算法之JavaScript实现

    转载部长一篇大作:常用排序算法之JavaScript实现 注:本文是转载实验室同门王部长的大作,找实习找工作在即,本文颇有用处!原文出处:http://www.cnblogs.com/ywang172 ...

  4. Java 常用排序算法/程序员必须掌握的 8大排序算法

    Java 常用排序算法/程序员必须掌握的 8大排序算法 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配 ...

  5. 常用排序算法的python实现和性能分析

    常用排序算法的python实现和性能分析 一年一度的换工作高峰又到了,HR大概每天都塞几份简历过来,基本上一天安排两个面试的话,当天就只能加班干活了.趁着面试别人的机会,自己也把一些基础算法和一些面试 ...

  6. 面试中常用排序算法实现(Java)

    当我们进行数据处理的时候,往往需要对数据进行查找操作,一个有序的数据集往往能够在高效的查找算法下快速得到结果.所以排序的效率就会显的十分重要,本篇我们将着重的介绍几个常见的排序算法,涉及如下内容: 排 ...

  7. 常用排序算法java实现

    写在前面:纸上得来终觉浅.基本排序算法的思想,可能很多人都说的头头是到,但能说和能写出来,真的还是有很大区别的. 今天整理了一下各种常用排序算法,当然还不全,后面会继续补充.代码中可能有累赘或错误的地 ...

  8. 我们一起来排序——使用Java语言优雅地实现常用排序算法

    破阵子·春景 燕子来时新社,梨花落后清明. 池上碧苔三四点,叶底黄鹂一两声.日长飞絮轻. 巧笑同桌伙伴,上学径里逢迎. 疑怪昨宵春梦好,元是今朝Offer拿.笑从双脸生. 排序算法--最基础的算法,互 ...

  9. Python实现常用排序算法

    Python实现常用排序算法 冒泡排序 思路: 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完 ...

随机推荐

  1. .htaccess应该放在哪里?

    根据 Apache 官方的介绍,.htaccess 文件属于分布式配置文件,可以放置在网站 www 根目录的所有子目录.以及 www 根目录的上一级目录中,生效的路径总是当前目录及其所有子目录(可在文 ...

  2. echart------属性详细介绍

    theme = { // 全图默认背景 // backgroundColor: 'rgba(0,0,0,0)', // 默认色板 color: ['#ff7f50','#87cefa','#da70d ...

  3. android studio 改变代码提示的方法

    移通152余继彪 在android studio中 默认代码提示的功能是ctrl+空格,这样的提示会和输入法造成冲突,所以要改变 改变的方法就是file—seting——Keymap然后搜索basic ...

  4. CodeForces 688E-The Values You Can Make

    题意: 给出n,k,分别代表硬币的数量与巧克力的价格,n个整数c1,c2,...ci...cn(ci代表第i块硬币的值);你可以从n块硬币中拿出金额恰好为k的硬币数并将其中的任意两块硬币组合得到一个数 ...

  5. NuSOAP与PHPRPC比较(转)

    因为看到有人问 Nusoap 和 PHPRPC 的比较,为了让大家能够更清楚地了解 Nusoap 和 PHPRPC 的关系,所以在这里做一个简要的说明性介绍,所写的内容也不是面面俱到的,只写了一些主要 ...

  6. Android RadioGroup 及资源文件 & selector

    RadioGroup :单选组         RadioButton :单选按钮 RadioButton和CheckBox的区别: 1.单个RadioButton在选中后,通过点击无法变为未选中 单 ...

  7. log4j.properties配置详解(转)

    本篇文章转自http://it.oyksoft.com/log4j/ 非常感谢原创作者的辛勤编写与分享. 一.Log4j简介 Log4j有三个主要的组件:Loggers(记录器),Appenders ...

  8. 第三个Sprint冲刺第五天

    讨论地点:宿舍 讨论成员:邵家文.李新.朱浩龙.陈俊金 讨论问题:继续昨天的工作

  9. 使用curl获取Location:重定向后url

    在php获取http头部信息上,php有个自带的函数get_headers(),我以前也是用这个的,听说效率在win上不咋地,再加上最近研究百度url无果,写了cURL获取重定向url的php代码来折 ...

  10. AFX_MANAGE_STATE(AfxGetStaticModuleState())DLL导出函数包含MFC资源

    AFX_MANAGE_STATE(AfxGetStaticModuleState()) 先看一个例子: .创建一个动态链接到MFC DLL的规则DLL,其内部包含一个对话框资源.指定该对话框ID如下: ...