JavaScript 基础(006_排序算法)
2016-09-27 20:56
232 查看
排序算法:最近在浏览技术博客的时候无意中发现了一篇关于排序算法的文章,个人觉得总结的非常好,本人是计算机专业的人,看完之后,在觉得汗颜的同时也是受益良多,作为程序员,多积累是个好习惯。自己动手写一写,加深理解,顺便把好文章分享一下。(本文只是用 js 写了各种排序算法的实现,至于各种排序算法的优劣、怎样在不同场合选择最佳的排序算法,这里就不班门弄斧,网上有很多资料,或者查百度百科。)
JS家的排序算法(郑重声明,转载):http://www.jianshu.com/p/1b4068ccd505
冒泡排序:
选择排序:
插入排序:
希尔排序:
归并排序:
快速排序:
堆排序:
计数排序:
JS家的排序算法(郑重声明,转载):http://www.jianshu.com/p/1b4068ccd505
冒泡排序:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Bubble Sort</title> <script type="text/javascript"> var arr = [3, 2, 4, 9, 1, 5, 7, 6, 8]; console.log(bubbleSort(arr)); function bubbleSort(arr) { var i = arr.length; while (i > 0) { for (let j = 0; j < i - 1; j++) { if (arr[j] > arr[j + 1]) { arr[j] = arr[j] + arr[j + 1]; arr[j + 1] = arr[j] - arr[j + 1]; arr[j] = arr[j] - arr[j + 1]; } } i--; } return arr; } </script> </head> <body> </body> </html>
选择排序:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Select Sort</title> <script type="text/javascript"> var arr = [3, 2, 4, 9, 1, 5, 7, 6, 8]; console.log(selectSort(arr)); function selectSort(arr) { var index = 0; // 记录最小数据的数组下标 if((arr == undefined) || (arr.length == 0)) { return arr; } for(let i=0; i<arr.length; i++) { index = i; for(let j=i+1; j<arr.length; j++) { if(arr[j] < arr[index]) { index = j; } } if(index == i) continue; arr[i] = arr[i] + arr[index]; arr[index] = arr[i] - arr[index]; arr[i] = arr[i] - arr[index]; } return arr; } </script> </head> <body> </body> </html>
插入排序:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert Sort</title> <script type="text/javascript"> var arr = [3, 2, 4, 9, 1, 5, 7, 6, 8]; console.log(insertSort(arr)); function insertSort(arr) { if((arr == undefined) || (arr.length < 2)) { return arr; } for(let i=1; i<arr.length; i++) { for(let j=i; j>0; j--) { if(arr[j] < arr[j-1]) { arr[j] = arr[j] + arr[j-1]; arr[j-1] = arr[j] - arr[j-1]; arr[j] = arr[j] - arr[j-1]; } else { break; } } } return arr; } </script> </head> <body> </body> </html>
希尔排序:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Shell Sort</title> <script type="text/javascript"> var arr = [3, 2, 4, 9, 1, 5, 7, 6, 8]; console.log(shellSort(arr)); function shellSort(arr) { if((arr == undefined) || (arr.length < 2)) { return arr; } var len = arr.length; for(var fraction=Math.floor(len/2); fraction>0; fraction=Math.floor(fraction/2)) { for(var i=fraction; i<len; i++) { for(var j=i-fraction; j>=0 && arr[j]>arr[fraction+j]; j=j-fraction) { arr[j] = arr[j] + arr[fraction+j]; arr[fraction+j] = arr[j] - arr[fraction+j]; arr[j] = arr[j] - arr[fraction+j]; } } } return arr; } </script> </head> <body> </body> </html>
归并排序:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Merge Sort</title> <script type="text/javascript"> function merge(arr, low, mid, high) { var i = low; var j = mid + 1; var k = 0; var tmp = [high - low + 1]; while(i <= mid && j <= high) { if(arr[i] <= arr[j]) { tmp[k] = arr[i]; i++; k++; } else { tmp[k] = arr[j]; j++; k++; } } while(i <= mid) { tmp[k] = arr[i]; i++; k++; } while(j <= high) { tmp[k] = arr[j]; j++; k++; } for (k = 0, i = low; i <= high; i++, k++) { arr[i] = tmp[k]; } } function sort(arr) { var len = arr.length; for (let gap = 1; gap < len; gap = 2 * gap) { var i = 0; for (i = 0; i + 2 * gap - 1 < len; i = i + 2 * gap) { merge(arr, i, i + gap - 1, i + 2 * gap - 1); } if (i + gap - 1 < len) { merge(arr, i, i + gap - 1, len - 1); } } return arr; } var arr = [3, 2, 4, 9, 1, 5, 7, 6, 8]; console.log(sort(arr)); </script> </head> <body> </body> </html>
快速排序:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Quick Sort</title> <script type="text/javascript"> function quickSort(arr) { function sort(prev, numsize) { var nonius = prev; var j = numsize - 1; var flag = arr[prev]; if((numsize-prev) > 1) { while(nonius < j) { for(; nonius < j; j--) { if(arr[j] < flag) { arr[nonius] = arr[j]; nonius++; break; } } for(; nonius < j; nonius++) { if(arr[nonius] > flag) { arr[j] = arr[nonius]; j--; break; } } } arr[nonius] = flag; sort(0, nonius); sort(nonius+1, numsize); } } sort(0, arr.length); return arr; } var arr = [3, 2, 4, 9, 1, 5, 7, 6, 8]; console.log(quickSort(arr)); </script> </head> <body> </body> </html>
堆排序:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Heap Sort</title> <script type="text/javascript"> Array.prototype.buildMaxHeap = function() { for(let i=Math.floor(this.length/2)-1; i>=0; i--) { this.heapAdjust(i, this.length); } }; Array.prototype.heapAdjust = function(i, j) { var largest = i; var left = 2*i + 1; var right = 2*i + 2; if(left<j && this[largest]<this[left]) { largest = left; } if(right<j && this[largest]<this[right]) { largest = right; } if(largest != i) { this.swap(i, largest); this.heapAdjust(largest, j); } }; Array.prototype.swap = function(i, j) { this[i] = this[i] + this[j]; this[j] = this[i] - this[j]; this[i] = this[i] - this[j]; }; Array.prototype.headSort = function() { this.buildMaxHeap(); for(let i=this.length-1; i>0; i--) { this.swap(0, i); this.heapAdjust(0, i); } return this; }; var arr = new Array(); [].push.apply(arr, [3, 2, 4, 9, 1, 5, 7, 6, 8]); console.log(arr.headSort()); </script> </head> <body> </body> </html>
计数排序:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Count Sort</title> <script type="text/javascript"> Array.prototype.init = function() { for(let i=0; i<this.length; i++) { this[i] = 0; } } function countSort(a) { var b = new Array(a.length); b.init(); var max = a[0]; var min = a[0]; for(let i in a) { if(a[i] > max) { max = a[i]; } if(a[i] < min) { min = a[i]; } } var k = max - min + 1; var c = new Array(k); c.init(); for(let i=0; i<a.length; ++i) { c[a[i]-min] += 1; } for(let i=1; i<c.length; ++i) { c[i] = c[i] + c[i-1]; } for(let i=a.length-1; i>=0; --i) { b[--c[a[i]-min]] = a[i]; } return b; } var a = [3, 2, 4, 9, 1, 5, 7, 6, 8]; console.log(countSort(a)); </script> </head> <body> </body> </html>
相关文章推荐
- javascript-几个基础的排序算法
- javaScript基础
- JavaScript 基础教程
- JavaScript基础知识
- JavaScript基础的全部东东
- javascript基础的动画教程,直观易懂
- JavaScript基础知识
- javaScript--数组基础
- AJAX基础:JavaScript中类的实现
- javascript基础知识
- JavaScript 基础教程(2)
- javascript基础知识
- 简析基础排序算法
- JavaScript的继承(Ajax基础教程)
- JavaScript就这么回事1:基础知识
- JavaScript 基础教程(2)
- Lucene基础排序算法改进
- Lucene基础排序算法
- 1)JavaScript面向对象的基础
- JavaScript基础知识总结