当前位置:首页 » 操作系统 » js简单算法

js简单算法

发布时间: 2025-06-19 09:42:38

1. 求个JS算法

把三个坐标点放到一个数组里:

vard=[[0,0],[10,0],[5,5]];

然后用个变量i表示A点在数组d中的初始序号:

vari=0;

这样ABC三个点的坐标就是:

vara,b,c
a=d[i];
b=d[(i+1)%3];
c=d[(i+2)%3];

向右旋转时:

a=d[++i%3];
b=d[(i+1)%3];
c=d[(i+2)%3];

向左旋转时:

a=d[--i<0?2:i];
b=d[(i+1)%3];
c=d[(i+2)%3];

2. JS 中常见的几种去重方法

ES6 提供了新的数据结构 Set 。它类似于数组,但是成员的值都是唯一的,没有重复的值。
Set 本身是一个构造函数,用来生成 Set 数据结构。
利用的算法类似 '===',与 '===' 的区别是 ‘===’ 认为 NaN != NaN , set 的算法认为它们是相等的。
但 Set 不支持对象方法,认为对象都是不相等的。

原理: splice 会改变原数组

filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素
indexOf ( searchvalue, fromindex )
searchvalue :必填值,规定需检索的字符串值
fromindex :选填值,规定在字符串中开始检索的位置。它的合法取值是 0 到 stringObject.length - 1。
如省略该参数,则将从字符串的首字符开始检索。

原理:相邻元素对比法,若相等则去掉一个
注:array.sort( function ) 参数必须是函数,可选,默认升

3. web前端javascript能实现什么算法或者计算

在Web开发中,JavaScript很重要,算法也很重要。下面整理了一下一些常见的算法在JavaScript下的实现,包括二分法、求字符串长度、数组去重、插入排序、选择排序、希尔排序、快速排序、冒泡法等等。仅仅是为了练手,不保证高效与美观,或许还有Bug,有时间再完善吧。

1.二分法:

function binary(items,value){

var startIndex=0,

stopIndex=items.length-1,

midlleIndex=(startIndex+stopIndex)>>>1;

while(items[middleIndex]!=value && startIndex

if(items[middleIndex]>value){

stopIndex=middleIndex-1;

}else{

startIndex=middleIndex+1;

}

middleIndex=(startIndex+stopIndex)>>>1;

}

return items[middleIndex]!=value ? false:true;

}

2.十六进制颜色值的随机生成:

function randomColor(){

var arrHex=["0","2","3","4","5","6","7","8","9","a","b","c","d"],

strHex="#",

index;

for(var i=0;i < 6; i++){

index=Math.round(Math.random()*15);

strHex+=arrHex[index];

}

return strHex;

}

一个求字符串长度的方法:

function GetBytes(str){

var len=str.length,

bytes=len;

for(var i=0;i < len;i++){

if(str.CharCodeAt>255){

bytes++;

}

}

return bytes;

}

3.js实现数组去重:

Array.protype.delRepeat=function(){

var newArray=new Array();

var len=this.length;

for(var i=0;i < len;i++){

for(var j=i+1;j < len;j++)

{

if(this[i]==this[j])

{

++i;

}

}

newArray.push(this[i]);

}

return newArray;

}

4.插入排序。所谓的插入排序,就是将序列中的第一个元素看成一个有序的子序列,然后不段向后比较交换比较交换。

function insertSort(arr){

var key;

for(var j = 1; j < arr.length ; j++){

//排好序的

var i = j - 1;

key = arr[j];

while(i >= 0 && arr[i] > key){

arr[i + 1] = arr[i];

i --;

}

arr[i + 1] = key;

}

return arr;

}

5.选择排序。其实基本的思想就是从待排序的数组中选择最小或者最大的,放在起始位置,然后从剩下的数组中选择最小或者最大的排在这公司数的后面。

function selectionSort(data)

{

var i, j, min, temp , count=data.length;

for(i = 0; i < count - 1; i++) {

/* find the minimum */

min = i;

for (j = i+1; j < count; j++)

{

if (data[j] < data[min])

{ min = j;}

}

/* swap data[i] and data[min] */

temp = data[i];

data[i] = data[min];

data[min] = temp;

}

return data;

}

6.希尔排序,也称递减增量排序算法。其实说到底也是插入排序的变种。

function shellSort(array){

var stepArr = [1750, 701, 301, 132, 57, 23, 10, 4, 1]; //
reverse()在维基上看到这个最优的步长较小数组

var i = 0;

var stepArrLength = stepArr.length;

var len = array.length;

var len2 = parseInt(len/2);

for(;i < stepArrLength; i++){

if(stepArr[i] > len2){

continue;

}

stepSort(stepArr[i]);

}

// 排序一个步长

function stepSort(step){

//console.log(step) 使用的步长统计

var i = 0, j = 0, f, tem, key;

var stepLen = len%step > 0 ? parseInt(len/step) + 1 : len/step;

for(;i < step; i++){// 依次循环列

for(j=1;/*j < stepLen && */step * j + i < len;
j++){//依次循环每列的每行

tem = f = step * j + i;

key = array[f];

while((tem-=step) >= 0){// 依次向上查找

if(array[tem] > key){

array[tem+step] = array[tem];

}else{

break;

}

}

array[tem + step ] = key;

}

}

}

return array;

}

7.快速排序。其实说到底快速排序算法就系对冒泡排序的一种改进,采用的就是算法理论中的分治递归的思想,说得明白点,它的做法就是:通过一趟排序将待排序的纪录分割成两部分,其中一部分的纪录值比另外一部分的纪录值要小,就可以继续分别对这两部分纪录进行排序;不段的递归实施上面两个操作,从而实现纪录值的排序。

function quickSort(arr,l,r){

if(l < r){

var mid=arr[parseInt((l+r)/2)],i=l-1,j=r+1;

while(true){

while(arr[++i] < mid);

while(arr[--j]>mid);

if(i>=j)break;

var temp=arr[i];

arr[i]=arr[j];

arr[j]=temp;

}

quickSort(arr,l,i-1);

quickSort(arr,j+1,r);

}

return arr;

}

8.冒泡法:

function bullSort(array){

var temp;

for(var i=0;i < array.length;i++)

{

for(var j=array.length-1;j > i;j--){

if(array[j] < array[j-1])

{

temp = array[j];

array[j]=array[j-1];

array[j-1]=temp;

}

}

}

return array;

}

4. 如何使用JS实现微信红包算法


这次给大家带来如何使用JS实现微信红包算法,使用JS实现微信红包算法的注意事项有哪些,下面就是实战案例,一起来看一下。
我们假设有一个100元的红包,要发给10个人。为了保证公平,算法需要保证以下的原则:
每个人最少能抢到0.01元
每个人的机会平等
所有人的金额之和等于100元
1.简单的随机函数实现
很多朋友的一般思路是:
第一步:从0-100中随机一个数,得到第一个红包金额。
第二步:从0-剩余金额中随机一个数,得到第二个红包金额。
第三步:...
最后一步把剩余的钱都给最后一个人。
以此类推,得到全部的10 个红包。但是不知道大家注意到没有,这样存在明显的 不公平 。先抢的人比较有优势,第一个人的随机范围是0-100,有可能得到较大的金额。而最后一个人的随机范围就会很小,如果第一个人抢到了90块钱,那么最后一个人就不可能有的到超过10块钱的机会。我们用代码模拟一下这个过程:

测试结果如下:

细心的朋友会注意到,余额的值不正确,这是JavaScript浮点数运算的已知问题。当然解决的方式有很多,如果你有好的办法欢迎你给我留言。
相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!
推荐阅读:
如何使用vue中filter

怎样使用vue判断dom的class

5. js 冒泡排序算法详解

冒泡排序是一种基础的排序算法,其原理相对简单。在对数组进行排序时,我们从头开始,比较相邻的两个元素。如果前一个元素大于后一个元素,就将它们交换位置。这样,经过一轮比较和交换后,数组中最大的元素就会被“泡”到数组的最后。我们重复这个过程n-1次,其中n是数组的长度,这样所有元素都能按照从小到大的顺序排列。

具体实现上,我们首先找到数组中最大的元素,并将它放在数组的最后。然后重复这个过程n-1次,每次都能确定一个最大值并将其移到正确的位置。这样,数组就能完成排序。原始的冒泡排序代码执行速度为0.153毫秒。

优化后的代码会在下一次遍历时跳过已确定的最大值,避免不必要的交换。这样执行速度提升到了0.105毫秒,更加高效。通过这样的改进,我们得到了完整的冒泡排序算法。

总结而言,冒泡排序涉及外层循环控制整个排序过程,内层循环用于元素的比较和交换。找到最大值并置于数组末端,直至完成排序。

希望以上内容能帮助到您。如果您觉得有帮助,不妨收藏关注。谢谢!

热点内容
第五人格转区ios换安卓怎么操作 发布:2025-06-19 13:44:17 浏览:374
智能还款源码 发布:2025-06-19 13:42:46 浏览:7
源码广告去除 发布:2025-06-19 13:41:15 浏览:749
C语言轮班 发布:2025-06-19 13:31:03 浏览:373
微信转钱密码如何换掉 发布:2025-06-19 13:30:27 浏览:716
麒麟系统服务器怎么样 发布:2025-06-19 13:30:20 浏览:419
排除相同数据库 发布:2025-06-19 13:28:05 浏览:803
易语言怎么编译腾讯软件 发布:2025-06-19 13:16:01 浏览:152
维沃y55手机账户密码是多少 发布:2025-06-19 13:15:13 浏览:175
戏剧矛盾算法 发布:2025-06-19 13:03:27 浏览:606