js【生成规定数量不重复随机数】、【冒泡排序】、【鸡尾酒排序】、【选择排序】、【插入排序】、【未完工的二分插入排序】------【总结】
【生成规定数量不重复随机数】
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【生成规定数量不重复随机数】、【冒泡排序】、【鸡尾酒排序】、【选择排序】、【插入排序】、【未完工的二分插入排序】------【总结】的更多相关文章
- 动态生成16位不重复随机数、随机创建2位ID
/** 1. * 动态生成16位不重复随机数 * * @return */ public synchronized static String generate16() { StringBuffer ...
- c语言:简单排序:冒泡排序法、选择排序法、插入排序法(待写)
1.冒泡排序法: 假设有n个数需要按从小到大排序,冒泡排序的原理是,在这一排数字中,将第一个数与第二个数比较大小,如果后面的比前面的小,就将他们交换位置.然后再比较第二个和第三个,再交换,直到第n-1 ...
- 冒泡排序Vs直接选择排序
什么是排序?为什么要使用排序?事实上我们生活中处处都用到了排序.拿字典来说,如今,我们要在字典中查找某个字(已经知道这个字的读音),首先.我们须要依据这个字的读音,找到它所所在文件夹中的位置,然后依据 ...
- java 冒泡排序法、选择排序
1.冒泡排序 /* * 冒泡排序 * 外层控制循环多少趟,内层控制每一趟的循环次数 */ public class Test08 { public static void main(String[] ...
- JS生成指定范围内的随机数(支持随机小数)
直接需要函数的话,直接到文章的最后面找. ============================================================= 转载:https://www.cn ...
- java 合并排序算法、冒泡排序算法、选择排序算法、插入排序算法、快速排序算法的描述
算法是在有限步骤内求解某一问题所使用的一组定义明确的规则.通俗点说,就是计算机解题的过程.在这个过程中,无论是形成解题思路还是编写程序,都是在实施某种算法.前者是推理实现的算法,后者是操作实现的算法. ...
- 冒泡排序与简单选择排序——Java实现
1.冒泡排序 1)原理说明:反复遍历要排序的数列,一次比較两个元素,假设他们的顺序错误就把他们交换过来.走訪数列的工作是反复地进行直到没有再须要交换,也就是说该数列已经排序完毕. 2)代码实现: pa ...
- c/c++ 算法之快速排序法 冒泡排序法,选择排序法,插入排序法
本文详细叙述和实现了快速排序算法,冒泡排序 选择排序 插入排序比较简单,原理在这里不再详述,直接用代码进行了实现. 快速排序法(quicksort)是目前所公认最快的排序方法之一(视解题的对象而定), ...
- Java学习笔记day07_琐碎知识_水仙花数_ASCII码_冒泡排序_简单选择排序_折半查找
琐碎知识: 水仙花数, ASCII码, 冒泡排序, 简单选择排序, 折半查找 1.水仙花数 每位数的平方的和等于本身. 如100到999之间的水仙花数满足: 个位的平方+十位的平方+百位的平方 = 本 ...
随机推荐
- 洛谷p1198 最大数
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; in ...
- 018-019 NET5_内置容器支持依赖注入+IServiceCollection的生命周期
概念: DI依赖注入: IServiceCollection仅支持构造函数注入 什么是依赖注入? 如果对象A依赖对象B,对象B依赖对象C,就可以先构造对象C,然后传递给对象B,再把对象B传递给A.得到 ...
- memcached php
What is Memcached? Free & open source, high-performance, distributed memory object caching syste ...
- JavaScript this All In One
JavaScript this All In One js, this, bind, call, apply, new, function, arrow function, constructor f ...
- js to svg flowchart
js to svg flowchart flowchart https://flowchart.js.org/ https://github.com/adrai/flowchart.js https: ...
- server sent events
server sent events server push https://html5doctor.com/server-sent-events/ https://developer.mozilla ...
- nasm astrcpy_s函数 x86
xxx.asm %define p1 ebp+8 %define p2 ebp+12 %define p3 ebp+16 section .text global dllmain export ast ...
- Captain technology开发的新能源汽车强在哪里?
在新能源汽车飞速发展的这些年,Captain technology 认识到,要改变有状况,就要不断创新,调整新能源汽车发展路线.新能源汽车本质永远是汽车, Captain technology是在改变 ...
- Spring 注解(二)注解工具类
本文转载自Spring 注解(二)注解工具类 导语 首先回顾一下 AnnotationUtils 和 AnnotatedElementUtils 这两个注解工具类的用法: @Test @GetMapp ...
- 几个小实践带你快速上手MindSpore
摘要:本文将带大家通过几个小实践快速上手MindSpore,其中包括MindSpore端边云统一格式及华为智慧终端背后的黑科技. MindSpore介绍 MindSpore是一种适用于端边云场景的新型 ...