摘要:公共函数库用于取出随机排列的数字原数组给原数组赋值排序算法插入排序时间复杂度二分法插入排序选择排序快速排序一堆排序测试用例插入排序时间测试二分法插入排序时间测试选择排序时间测试快速排序时间测试一堆
公共函数库(用于取出随机排列的数字)
</>复制代码
module.exports={
randomIntegerArray:function(count){
var originalArray=new Array;//原数组
//给原数组originalArray赋值
for (var i=0;i
排序算法
</>复制代码
//插入排序 时间复杂度O(n^2)
function insertionSort(array){
if(Object.prototype.toString.call(array).slice(8,-1)!="Array") {
throw new Error("array is not a Array")
return;
};
for (var i = 0,l=array.length; i < l; i++) {
var insert=array[i];
var j=i-1;
while (j>=0&&array[j]>insert) {
array[j+1]=array[j];
j--;
}
array[j+1]=insert;
}
return array;
}
//二分法插入排序
function dichotomyInsertSort(array){
if(Object.prototype.toString.call(array).slice(8,-1)!="Array"){
throw new Error("array is not a Array")
return;
}
for (var i = 0; i < array.length; i++) {
var key=array[i],left=0,right=i-1;
while(left<=right){
var mid=parseInt((left+right)/2);
if(key=left; j--) {
array[j+1]=array[j];
}
array[left]=key;
}
return array;
}
//选择排序
function selectionSort(array){
if(Object.prototype.toString.call(array).slice(8,-1)!="Array"){
throw new Error("array is not a Array")
return;
}
for (var i = 0; i < array.length-1; i++) {
var min=array[i];
for(var j=i+1;jarray[j]){
var temp=array[j];
array[j]=min;
min=temp;
}
}
array[i]=min;
}
return array;
}
//快速排序 一
function quickSort(array,left,right){
if(Object.prototype.toString.call(array).slice(8,-1)!="Array"){
throw new Error("array is not a Array")
return;
}
if(left>=right) return;
var j=left-1,key=array[right],temp;
for (var i = left; i <=right; i++) {
if(array[i]<=key&&i!=j){
j++;
temp=array[j];
array[j]=array[i];
array[i]=temp;
}
}
quickSort(array,left,j-1);
quickSort(array,j+1,right);
}
//堆排序
/**
0
1 2
3 4 5 6
7 8 9 10
*/
var heapSort =(function(){
function heapAjust(array,len){
var mid=Math.floor(len/2);
for (var i = mid; i >=0; i--) {
var l=2*i+1,r=2*i+2,largest=i;
if(larray[largest]) largest=l;
if(rarray[largest]) largest=r;
if(largest!=i){
swap(array,i,largest)
}
}
}
function swap(array,i,j){
var temp=array[i];
array[i]=array[j];
array[j]=temp;
}
return function heap(array){
if(Object.prototype.toString.call(array).slice(8,-1)!="Array"){
console.error("array is not a Array");
return;
}
var len=array.length;
for (var i = 0; i < len; i++) {
heapAjust(array,len-i);
swap(array,0,len-1-i);
}
}
})()
module.exports={
insertionSort:insertionSort,
dichotomyInsertSort:dichotomyInsertSort,
selectionSort:selectionSort,
quickSort:quickSort,
heapSort:heapSort
}
测试用例
</>复制代码
var common=require("./common.js");
var sort=require("./sort.js")
var l=100000;
var a=common.randomIntegerArray(l),b;
var a1=common.randomIntegerArray(l),b1;
var a2=common.randomIntegerArray(l),b2;
var a3=common.randomIntegerArray(l),b3;
var a4=common.randomIntegerArray(l),b4;
/**************
*插入排序时间测试
***************/
console.time("insert");
// console.log(a);
b=sort.insertionSort(a);
// console.log(b);
console.timeEnd("insert");
/**************
*二分法插入排序时间测试
***************/
console.time("twoinsert");
// console.log(a1);
b1=sort.dichotomyInsertSort(a);
// console.log(b1);
console.timeEnd("twoinsert");
/**************
*选择排序时间测试
***************/
console.time("selectionSort");
// console.log(a2);
b2=sort.selectionSort(a2);
// console.log(b2);
console.timeEnd("selectionSort");
/**************
*快速排序时间测试一
***************/
console.time("quickSort1");
// console.log(a3);
sort.quickSort(a3,0,a3.length-1);
// console.log(a3);
console.timeEnd("quickSort1");
/**************
*堆排序时间测试一
***************/
console.time("heapSort");
// console.log(a4);
debugger;
sort.heapSort(a4);
// console.log(a4);
console.timeEnd("heapSort");
实验结构
100000个随机数字的时候
insert: 7943ms
twoinsert: 96807ms
selectionSort: 21013ms
quickSort1: 56ms
heapSort: 16309ms
github源码位置:地址https://github.com/ddcouples/...
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/82691.html
摘要:适用于数据比较少或基本有序的情况。插入排序时间复杂度为,空间复杂度为,属于稳定排序。算法适用于少量数据的排序。就像下图这样,可以理解桶的意思下图是整个排序过程示意图基数排序时间复杂度为,空间复杂度为,属于稳定排序。 写在前面 个人感觉:javascript对类似排序查找这样的功能已经有了很好的封装,以致于当我们想对数组排序的时候只需要调用arr.sort()方法,而查找数组元素也只需要...
摘要:是稳定的排序方法。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。算法实现选择排序堆排序描述堆排序是指利用堆积树堆这种数据结构所设计的一种排序算法,它是选择排序的一种。 1、插入排序 描述 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定...
摘要:为检查长度为的列表,二分查找需要执行次操作。最后需要指出的一点是高水平的读者可研究一下二叉树关于二叉树,戳这里数据结构与算法二叉树算法常见练习在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。 常见数据结构 简单数据结构(必须理解和掌握) 有序数据结构:栈、队列、链表。有序数据结构省空间(储存空间小) 无序数据结构:集合、字典、散列表,无序...
阅读 1709·2023-04-26 02:50
阅读 3695·2023-04-26 00:28
阅读 2074·2023-04-25 15:18
阅读 3351·2021-11-24 10:31
阅读 1147·2019-08-30 13:00
阅读 1133·2019-08-29 15:19
阅读 1896·2019-08-29 13:09
阅读 3106·2019-08-29 13:06