欢迎来到福编程网,本站提供各种互联网专业知识!

js实现常用排序算法

发布时间:2016-08-09 作者:_eve 来源:转载
这篇文章主要为大家详细介绍了js实现常用排序算法的代码,感兴趣的小伙伴们可以参考一下

本文为大家分享了js实现常用排序算法,具体内容如下

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. }

总结:算法效率比较:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持全福编程网。

相关推荐

返回顶部