JavaScript版几种常见排序算法
来源:互联网 发布:数据库自然连接语句 编辑:程序博客网 时间:2024/06/16 02:34
1.冒泡排序(最慢)
2.选择排序
3.插入排序(比冒泡快)
4.希尔排序
5.归并排序
6.快速排序(非常快的排序方式)
function CArry(numElements){this.dataStore = [];this.gaps = [5,3,1];this.pos = 0;this.numElements = numElements;this.toString = toString;this.setData = setData;this.insert = insert;this.clear = clear;this.swap = swap;this.bubbleSort = bubbleSort;this.selectionSort = selectionSort;this.insertionSort = insertionSort;this.shellsort = shellsort;this.setGaps = setGaps;this.mergeSort = mergeSort;this.mergeArrays = mergeArrays; //创建长度为100的数组for(var i=0;i<numElements;++i){this.dataStore[i] = i;}}/*-------------------函数--------------------*///生成numElements个随机数function setData(){for(var i=0;i<this.numElements;++i){this.dataStore[i] = Math.floor(Math.random() * (this.numElements + 1));}}//显示dataStore中的随机数,每行显示10个function toString(){var str = '';try{return this.dataStore.reduce(function(cur,pre,index,item){ if(index>0 && (index+1)%10===0){ return cur + ' ' + pre + '\n'; }else{ return cur + ' ' + pre; }})}catch(e){console.log('数组长度为零');}};//insert方法()function insert(element){//this.dataStore[this.pos++] = element;this.dataStore[this.numElements++] = element;}//清空函数function clear(){for ( var i = 0; i < this.dataStore.length; ++i ) {this.dataStore[i] = 0;}//这种清空让数组全空,需要在toString里面捕获错误,而上面的是让所有数据为0,但是数组长度不变,不用捕获错误//this.dataStore.length = 0; }//swap交换函数function swap(arr,index1,index2){var temp = arr[index1];arr[index1] = arr[index2];arr[index2] = temp;} //冒泡排序(最慢) function bubbleSort(){ var len = this.dataStore.length; for(var i=len;i>=2;i--){ for(var j=0;j<i-1;j++){ if(this.dataStore[j] > this.dataStore[j+1]){ this.swap(this.dataStore,j,j+1); } } } } //选择排序 function selectionSort(){ var min=0; var len = this.dataStore.length; for(var i=0;i<len;i++){ min = i; for(var j=i+1;j<len;j++){ if(this.dataStore[min]>=this.dataStore[j]){ min = j; } } this.swap(this.dataStore,i,min); } } //插入排序 function insertionSort() {var temp;var len = this.dataStore.length;for (var i = 1; i < len; ++i) {temp = this.dataStore[i];for(var j=i;this.dataStore[j-1]>=temp;j--){this.dataStore[j] = this.dataStore[j - 1];}this.dataStore[j] = temp;}}//希尔排序function shellsort() {for (var g = 0; g < this.gaps.length; ++g) {for (var i = this.gaps[g]; i < this.dataStore.length; ++i) {var temp = this.dataStore[i];for (var j = i; j >= this.gaps[g]&&this.dataStore[j-this.gaps[g]] > temp;j-=this.gaps[g]){this.dataStore[j] = this.dataStore[j - this.gaps[g]];}this.dataStore[j] = temp;console.log(this.toString())}}}//设置gaps间隔序列function setGaps(arr) {this.gaps = arr;}//归并排序的辅助函数function mergeArrays(arr, startLeft, stopLeft, startRight, stopRight) {var rightArr = new Array(stopRight - startRight + 1);var leftArr = new Array(stopLeft - startLeft + 1);k = startRight;for (var i = 0; i < (rightArr.length-1); ++i) {rightArr[i] = arr[k];++k;}k = startLeft;for (var i = 0; i < (leftArr.length-1); ++i) {leftArr[i] = arr[k];++k;}rightArr[rightArr.length-1] = Infinity; leftArr[leftArr.length-1] = Infinity;var m = 0;var n = 0;for (var k = startLeft; k < stopRight; ++k) {if (leftArr[m] <= rightArr[n]) {arr[k] = leftArr[m];m++;}else {arr[k] = rightArr[n];n++;}}console.log("left array - ", leftArr);console.log("right array - ", rightArr);} //归并排序function mergeSort() {if (this.dataStore.length < 2) {return;}var step = 1;var left, right;while (step < this.dataStore.length) {left = 0;right = step;while (right + step <= this.dataStore.length) {mergeArrays(this.dataStore, left, left+step, right, right+step);left = right + step;right = left + step;}if (right < this.dataStore.length) {mergeArrays(this.dataStore, left, left+step, right, this.dataStore.length);}step *= 2;}}//快速排序function qSort(arr){if(arr.length === 0)return [];var left = [];var right = [];var pivot = arr[0];for(var i=1;i<arr.length;i++){if(arr[i]<pivot)left.push(arr[i]);elseright.push(arr[i]);}return qSort(left).concat(pivot,qSort(right));}//测试var oCArry = new CArry(10);oCArry.setData();//oCArry.insert(0);//oCArry.clear();//console.log(oCArry.dataStore);//console.log(oCArry.toString());//测试三种排序快慢/*var start1 = new Date().getTime();oCArry.bubbleSort();var stop1 = new Date().getTime();console.log('bubbleSort时间:'+(stop1-start1)); //305var start2 = new Date().getTime();oCArry.selectionSort();var stop2 = new Date().getTime();console.log('selectionSort时间:'+(stop2-start2)); //199var start3 = new Date().getTime();oCArry.insertionSort();var stop3 = new Date().getTime();console.log('selectionSort时间:'+(stop3-start3)); //1*//*console.log('希尔排序前:'+oCArry.toString());console.log('希尔排序中:'+oCArry.shellsort());console.log('希尔排序后:'+oCArry.toString());*//*console.log(oCArry.toString());oCArry.mergeSort();console.log(oCArry.toString());*/console.log(oCArry.toString());console.log(qSort([oCArry.dataStore]));
0 0
- JavaScript版几种常见排序算法
- JavaScript版几种常见排序算法
- JavaScript版几种常见排序算法
- JavaScript版几种常见排序算法
- JavaScript版几种常见排序算法
- JavaScript版几种常见排序算法分享
- 【分享】JavaScript版几种常见排序算法
- Javascript中的常见排序算法
- javascript常见排序算法总结
- 常见排序算法 之 Javascript版
- 常见排序算法 之 JavaScript版
- 常见排序算法的JavaScript实现
- 常见排序算法的Javascript实现
- 常见排序算法之JavaScript实现
- JavaScript常见的排序算法(一)
- 常见排序算法之JavaScript实现
- JavaScript中常见排序算法详解
- 几种常见排序算法的JavaScript实现
- Mysql error 2002 (HY000) : Can't connect to local MySQL server through socket '/tmp/mysql.sock'
- java面试题集
- 关闭mac之chrome的自动升级
- iOS项目拆分:数据本地持久化(4)
- linux下升级gblic
- JavaScript版几种常见排序算法
- Android Laucher3 去掉二级菜单
- win7创建wifi给手机
- 【iOS_Development】广告图的添加
- HDU 5883 The Best Path(欧拉路径\回路)
- 牛顿法
- CVPR 2016-9-19
- Html5页面开发app之查询按钮悬浮窗
- Android 数据持久化技术(即数据存储方式)