博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript实现排序算法
阅读量:6526 次
发布时间:2019-06-24

本文共 2308 字,大约阅读时间需要 7 分钟。

// 寄生构造方式实现继承  var MyArray=function(){    var arr=new Array();    // 添加值    arr.push.apply(arr,arguments);//和下面的循环一个效果    // for (var i = 0; i < arguments.length; i++) {
// arr.push(arguments[i]); // } // ===========================插入排序===================================== arr.insertSort=function(){ var position, current;//当前待排序的元素 for (var i = 1; i < arr.length; i++) { if (arr[i]
0 && arr[position-1]>current) arr[position]=current; }else{ //当前待排序的值>=上一个已排序的值 // 不用移动,直接进入下一个循环 } } }; // =======================希尔排序============================== // 是基于插入排序的变种(以下说的排序都是插入排序) // 对待排序的数组进行多次分组排序,最后在对这个数组进行整体合并排序 // // 那么有两个问题: // 1、怎么分组 // 这里的分组并不是真的新创建新的数组容器来将整个数组进行分组,在原数组上用一些标记来进行划分 // 例如数组:[1,2,33,5,67,0,6] // 我们取下标增量imcrement=3,2,1 分别对这个数组进行3次划分,并且对这3次划分的各个数组进行一次插入排序 // 增量为3:[1,5,6] [2,67] [33,0] ——排序——>[1,5,6] [2,67] [0,33]——新数组——>[1,2,0,5,67,33,6] // 增量为2:[1,0,67,6] [2,5,33] ——排序——> [1,0,6,67] [2,5,33] ——新数组——> [1,2,0,5,6,33,67] // 增量为1:[1,2,0,5,6,33,67] ——排序——> [0,1,2,5,6,33,67] // // 注:每次划分都是在排序后的新循序进行划分 // 这里的排序方法和之前的插入排序稍有区别,排序的时候"移位"使用的是swap方式的数值交换,因为不能影响到其它的分组。 // 2、怎么合并 // 这里分组并没有把数组分割,当使用增量为1的时候就是对整个数组进行合并排序 arr.shellSort=function(){ var increment=arr.length; do{ increment= parseInt(increment/3)+1;//这里的取整很重要 for (var i = 0; i
1) }; function _inerSort(start,gap){ var tmp; for (var i = start+gap; i < arr.length; i+=gap) { if (arr[i]
0 ; i--) { max_key=_findMax_index(0,i); _swapFun(max_key,i); } }; // ======================end of 选择排序================================ //

     

// 快速排序

function _partition(low,top){
var mid=low;
pivot=arr[low];
for (var i = low+1; i<top+1; i++) {
if (arr[i]<pivot) {//这个小于号很重要,不能用小于等于
var tmp=arr[i];
arr.splice(i,1);
arr.splice(low,0,tmp);
mid++;
}
}
// var mid=arr.indexOf(pivot);//这个出问题了 有多个相同的值的时候
// console.log("mid="+mid);
return mid;
}

  

arr.quickSort=function(low,top){   if (low>=top) {console.log("low:"+low+"top:"+top+"\n");return;}   var p=_partition(low,top);     arguments.callee(low,p);     arguments.callee(p+1,top);  };    return arr;  };

 

转载于:https://www.cnblogs.com/fanglylu/p/6863547.html

你可能感兴趣的文章
《HTML5 开发实例大全》——1.26 使用鼠标光标拖动网页中的文字
查看>>
3144: [Hnoi2013]切糕
查看>>
异构数据库
查看>>
iOS.ObjC.Basic-Knowledge
查看>>
iOS.ReactNative-3-about-viewmanager-uimanager-and-bridgemodule
查看>>
透视校正插值
查看>>
【转载】WinCE6.0 Camera驱动源码分析(二)
查看>>
Cobertura代码覆盖率测试
查看>>
【selenium学习笔记一】python + selenium定位页面元素的办法。
查看>>
Linux禁止ping
查看>>
【Matplotlib】 标注一些点
查看>>
[AX]乐观并发控制Optimistic Concurrency Control
查看>>
自定义类加载器
查看>>
MySQL数据库事务各隔离级别加锁情况--Repeatable Read && MVCC(转)
查看>>
C++构造函数例程
查看>>
把某一列值转换为逗号分隔字符串
查看>>
DLL,DML,DCL,TCL in Oracle
查看>>
android之存储篇_存储方式总览
查看>>
SSE指令集学习:Compiler Intrinsic
查看>>
两种attach to process的方法
查看>>