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之间的水仙花数满足: 个位的平方+十位的平方+百位的平方 = 本 ...
随机推荐
- H5 页面如何展示大量的表格数据
H5 页面如何展示大量的表格数据 列数过多 图表化 refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!
- 如何使用 js 实现tooltips 的 hover 时候坐标的自动计算
如何使用 js 实现tooltips 的 hover 时候坐标的自动计算 js 监听 mouseover event https://developer.mozilla.org/zh-CN/docs/ ...
- 微软官方 free 教程 & 教材 ,MVC ,ASP.NET,.NET,
MVA https://mva.microsoft.com/ebooks free ebooks 微软官方, free, 教程 ,教材,微软官方 free 教程 & 教材,MVC ,ASP.N ...
- MathJax TeX & LaTeX
MathJax TeX & LaTeX mathcal https://leetcode-cn.com/problems/binary-search/solution/er-fen-cha-z ...
- 如何实现 React 模块动态导入
如何实现 React 模块动态导入 React 模块动态导入 代码分割 webpack & code splitting https://reactjs.org/docs/code-split ...
- CSS Layout All In One
CSS Layout All In One CSS2 position float % px , rem, em CSS3 flex grid multi column vw / vh 常见布局模式 ...
- nodejs stream 创建读写流
const fs = require("fs"); const { Writable, Readable, Duplex, Transform } = require(" ...
- 与程序员相关的CPU缓存知识
本文转载自与程序员相关的CPU缓存知识 基础知识 首先,我们都知道现在的CPU多核技术,都会有几级缓存,老的CPU会有两级内存(L1和L2),新的CPU会有三级内存(L1,L2,L3 ),如下图所示: ...
- Java基本概念:多态
一.简介 描述: 多态性是面向对象编程中的一个重要特性,主要是用来实现动态联编的.换句话说,就是程序的最终状态只有在执行过程中才被决定,而非在编译期间就决定了.这对于大型系统来说能提高系统的灵活性和扩 ...
- 微信小程序滚动条设置
隐藏滚动条 ::-webkit-scrollbar { width: 0rpx; height: 0rpx; background-color: transparent; } 其实设置为宽高为 0 或 ...