【生成规定数量不重复随机数】

function creatRandom( num ){

    var randomLen = num,
ranArr = [],
thisRan = null,
whileOff = false,
cnt = 0; //初始化push进去1个
thisRan = Math.floor( Math.random()*randomLen );
ranArr.push(thisRan); for( var i=1; i<randomLen; i++ ){ while( true ){
//在生成1个随机数开始判断之旅
thisRan = Math.floor( Math.random()*randomLen ); //whileOff为终止while的开关,只有当thisRan生成了1个与现有数字都不相同的数字时才会关闭while循环
whileOff = true;
for( var k=0; k<ranArr.length; k++ ){
if( thisRan == ranArr[k] ){
whileOff = false;
break;
}
} if( whileOff ){
ranArr.push(thisRan);
break;
}
}
} return ranArr; }

【冒泡排序】

function bubbling( arr ){

    var arr = arr,
arrLen = arr.length,
newArr = [],
broker = null; var oldDate = new Date();
for( var i=0; i<arrLen; i++ ){ for(var j=0; j<arrLen-1-i; j++){
if( arr[j] > arr[j+1] ){
broker = arr[j];
arr[j] = arr[j+1];
arr[j+1] = broker;
} } }
var newDate = new Date();
console.log(' ');
console.log('冒泡排序法'+ arrLen +'个数字花时:'+ (newDate-oldDate) +'毫秒');
console.log( arr ); }

【鸡尾酒排序】


function cocktail( arr ) {

    var arr = arr,
arrLen = arr.length,
newArr = [],
broker = null; var oldDate = new Date();
for( var i=0; i<arrLen; i++ ){ for(var j=i; j<arrLen-1-i; j++){
if( arr[j] > arr[j+1] ){
broker = arr[j];
arr[j] = arr[j+1];
arr[j+1] = broker;
} } for(var k=arrLen-2-i; k>i; k--){
if( arr[k] < arr[k-1] ){
broker = arr[k];
arr[k] = arr[k-1];
arr[k-1] = broker;
} } }
var newDate = new Date();
console.log( ' ' );
console.log('鸡尾酒排序法'+ arrLen +'个数字花时:'+ (newDate-oldDate) +'毫秒');
console.log( arr ); }

【选择排序】

function selection( arr ){

var arr = arr,
arrLen = arr.length,
newArr = [],
broker = null;

var cnt = 0,
a = cnt;

var oldDate = new Date();

while( cnt < arrLen ){

for(var i=cnt; i<arrLen; i++){

if( arr[i] < arr[a] ){
a = i;
}
}

broker = arr[cnt];
arr[cnt] = arr[a];
arr[a] = broker;
cnt++;
a = cnt;

}

var newDate = new Date();
console.log( ' ' );
console.log('选择排序法'+ arrLen +'个数字花时:'+ (newDate-oldDate) +'毫秒');
console.log( arr );

}

【插入排序】

function insertion( arr ){

    var arr = arr,
arrLen = arr.length,
newArr = [],
broker = null; var cnt = 0; var oldDate = new Date();
for(var i=0; i<arrLen-1; i++){ cnt = i; var get = arr[cnt+1];
while( cnt >= 0 && arr[cnt] > get ){
arr[cnt+1] = arr[cnt];
cnt--;
}
arr[cnt+1] = get; }
var newDate = new Date();
console.log( ' ' );
console.log('插入排序法'+ arrLen +'个数字花时:'+ (newDate-oldDate) +'毫秒');
console.log( arr ); }

【未完工的二分插入排序】

//未完工

function binaryInsertion( arr ){

    var arr = arr,
arrLen = arr.length,
newArr = [],
broker = null; var oldDate = new Date();
for(var i=0; i<arrLen-1; i++){ var cnt = i;
var get = arr[cnt+1];
var tIndex = 0; if( cnt >= 2000 ){ console.log( a ); var j = 1/2;
var a = Math.floor( (cnt+1)*j );
var oldA = 0; while( true ){ var dif = get - arr[a];
if( dif == 0 || dif == 1 ){ while( get == arr[a] ){
a++;
}
tIndex = a;
break; } if( dif == -1 && a>0 ){
a--;
tIndex = a;
break;
} if( Math.abs( oldA - a ) <= 10 ){
var l = oldA<a ? oldA : a;
for(var k=l,kLen=Math.abs( oldA - a ); k<kLen-1; k++){
if( arr[k] == get ){
tIndex = k;
break;
}
}
} //向右
if( dif > 1 ){
oldA = a;
j /= 2;
a = a + Math.floor( (cnt+1)*j );
} if( dif < -1 ){
oldA = a;
j /= 2;
a = a - Math.floor( (cnt+1)*j );
} } } while( cnt >= tIndex && arr[cnt] > get ){
arr[cnt+1] = arr[cnt];
cnt--;
}
arr[cnt+1] = get; }
var newDate = new Date();
console.log( ' ' );
console.log('二分插入排序法'+ arrLen +'个数字花时:'+ (newDate-oldDate) +'毫秒');
console.log( arr ); }

备注:

得益于【http://www.cnblogs.com/eniac12/p/5329396.html#s31】而做的这个js版本,做到二分排序实在做不下去了,主要是不知道怎样验证,其次心力憔悴,先放放,以后学习算法时再回来看看。

js【生成规定数量不重复随机数】、【冒泡排序】、【鸡尾酒排序】、【选择排序】、【插入排序】、【未完工的二分插入排序】------【总结】的更多相关文章

  1. 动态生成16位不重复随机数、随机创建2位ID

    /** 1. * 动态生成16位不重复随机数 * * @return */ public synchronized static String generate16() { StringBuffer ...

  2. c语言:简单排序:冒泡排序法、选择排序法、插入排序法(待写)

    1.冒泡排序法: 假设有n个数需要按从小到大排序,冒泡排序的原理是,在这一排数字中,将第一个数与第二个数比较大小,如果后面的比前面的小,就将他们交换位置.然后再比较第二个和第三个,再交换,直到第n-1 ...

  3. 冒泡排序Vs直接选择排序

    什么是排序?为什么要使用排序?事实上我们生活中处处都用到了排序.拿字典来说,如今,我们要在字典中查找某个字(已经知道这个字的读音),首先.我们须要依据这个字的读音,找到它所所在文件夹中的位置,然后依据 ...

  4. java 冒泡排序法、选择排序

    1.冒泡排序 /* * 冒泡排序 * 外层控制循环多少趟,内层控制每一趟的循环次数 */ public class Test08 { public static void main(String[] ...

  5. JS生成指定范围内的随机数(支持随机小数)

    直接需要函数的话,直接到文章的最后面找. ============================================================= 转载:https://www.cn ...

  6. java 合并排序算法、冒泡排序算法、选择排序算法、插入排序算法、快速排序算法的描述

    算法是在有限步骤内求解某一问题所使用的一组定义明确的规则.通俗点说,就是计算机解题的过程.在这个过程中,无论是形成解题思路还是编写程序,都是在实施某种算法.前者是推理实现的算法,后者是操作实现的算法. ...

  7. 冒泡排序与简单选择排序——Java实现

    1.冒泡排序 1)原理说明:反复遍历要排序的数列,一次比較两个元素,假设他们的顺序错误就把他们交换过来.走訪数列的工作是反复地进行直到没有再须要交换,也就是说该数列已经排序完毕. 2)代码实现: pa ...

  8. c/c++ 算法之快速排序法 冒泡排序法,选择排序法,插入排序法

    本文详细叙述和实现了快速排序算法,冒泡排序 选择排序 插入排序比较简单,原理在这里不再详述,直接用代码进行了实现. 快速排序法(quicksort)是目前所公认最快的排序方法之一(视解题的对象而定), ...

  9. Java学习笔记day07_琐碎知识_水仙花数_ASCII码_冒泡排序_简单选择排序_折半查找

    琐碎知识: 水仙花数, ASCII码, 冒泡排序, 简单选择排序, 折半查找 1.水仙花数 每位数的平方的和等于本身. 如100到999之间的水仙花数满足: 个位的平方+十位的平方+百位的平方 = 本 ...

随机推荐

  1. 浅谈WEB前端规范化标准之ESlint

    规范化标准 软件开发需要多人开发,不同的开发者具有不同的编码习惯和喜好,不同的喜好增加项目的维护成本,所以需要明确统一的标准,决定 了项目的可维护性,人为的约定不可靠,所以需要专门的工具进行约束,并且 ...

  2. shit mint-ui & navbar click event bug

    shit mint-ui & navbar click event bug # Vue 2.0 npm install mint-ui -S // 引入全部组件 import Vue from ...

  3. project generators & project scaffold

    project generators & project scaffold how to write a node cli & Project Scaffold https://www ...

  4. react slot component with args

    react slot component with args how to pass args to react props child component https://codesandbox.i ...

  5. css grid layout in practice

    css grid layout in practice https://caniuse.com/#search=grid subgrid https://caniuse.com/#search=cal ...

  6. Java 添加 、读取以及删除PPT幻灯片中的视频、音频文件

    在PPT中,可以操作很多种元素,如形状.图形.文字.图片.表格等,也可以插入视频或者音频文件,来丰富幻灯片的内容呈现方式.下面将介绍在Java程序中如何来添加视频.音频文件到PPT幻灯片,读取和删除幻 ...

  7. Java基本概念:内部类

    一.简介 描述: 很多时候我们创建类的对象的时候并不需要使用很多次,每次只使用一次,这个时候我们就可以使用内部类了. 内部类不是在一个java源文件中编写两个平行的类,而是在一个类的内部再定义另外一个 ...

  8. JavaScript async/await:优点、陷阱及如何使用

    翻译练习 原博客地址:JavaScript async/await: The Good Part, Pitfalls and How to Use ES7中引进的async/await是对JavaSc ...

  9. Java 队列同步器 AQS

    本文部分摘自<Java 并发编程的艺术> 概述 队列同步器 AbstractQueuedSynchronize(以下简称同步器),是用来构建锁(Lock)或者其他同步组件(JUC 并发包) ...

  10. keras报错:AttributeError: '_thread._local' object has no attribute 'value'

    需求是使用pyqt5中的槽函数运行keras模型训练,为了不让工具在模型训练的过程中出现假死的现象,于是把训练操作放到单独的线程中运行,于是问题来了,训练操作在主线程运行时正常,但是界面假死,假若训练 ...