数组排序(中间大两边小)
function test(){
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var result = [];//最终输出结果
result.push(arr[0]);//排序之后直接将第1、2位的数据放入最终结果之中
result.push(arr[1]);
var l = 1;//定义该从何处插入数组值
var lNum = parseInt(arr[0]),rNum = parseInt(arr[1]);//最终结果的左右侧的数值之和
var boor = false;//这个定义是用于对循环进行限制,从第三个数据开始,每两个进行比对,第一个比对后,第二个就不用再进行循环了!
for (var i = 2 ; i < arr.length; i++) {//两翼数据平衡第一次
if((arr.length)%2 == 0){//判断输入的数组长度是否为偶数
if(boor){
boor = false;
continue;
}else{
boor = true;
result.splice(l,0,arr[i+1]);
l ++;
result.splice(l,0,arr[i]);
}
}else{
if(i == arr.length-1){
result.splice(l,0,arr[i]);
}else if(boor){
boor = false;
continue;
}else{
boor = true;
result.splice(l,0,arr[i+1]);
l ++;
result.splice(l,0,arr[i]);
}
}
}
//两翼数据平衡处理第二次
var lIndex = 0;//初始result左部索引号
var rIndex = result.length-1;//初始result右部索引号
var lSum = 0,rSum = 0;//存放左右两端数据的和
for (var i = 0; i < Math.floor(result.length/2);i++) {//需要求和的次数为数组长度的一半,这里需要注意当数组长度为偶数时,默认左边少进行一次求和,保证最大数在中间部分
if((result.length)%2 == 0){
rSum += parseInt(result[rIndex]);
rIndex --;
if(i < (result.length/2)-1){
lSum += parseInt(result[lIndex]);
lIndex ++;
}
}else{
lSum += parseInt(result[lIndex]);
lIndex ++;
rSum += parseInt(result[rIndex]);
rIndex --;
}
}
if(lSum < rSum-3){//两翼数据平衡处理第三次,根据第二次结果来判断执行,减去3的目的是限制两边之差,若小于3则不用进行比对,直接输出便可
var gap = Math.abs(lSum - rSum)-3;//数值差的绝对值
for (var i = gap; i > 0; i--) {
for (var j = Math.floor((result.length/2)) ; j < result.length; j++ ) {
if(i == parseInt(result[j])){
var a = result.slice(j,j+1);
result.splice(j,1);
if(j == result.length){
result.splice(1,0,a);
}else{
result.splice(result.length-j,0,a);
}
alert(result);
return;//满足条件,不用再进行数据交换了,结束整个循环;
}
}
}
}else{
alert(result);
}
}
数组排序(中间大两边小)相关推荐
- js数组排序 中间大两边小
思路:先把数组内的元素进行排序 然后对数组遍历通过index来进行单双数判断头部添加还是尾部添加 实现: let arrCount = [1,4,5,8,89,44,15,13,110,120,150 ...
- html中间大两边小轮播代码,vue使用swiper实现中间大两边小的轮播图效果
项目中使用的vue,刚好有需求要实现轮播图,突出显示当前图片,两边展示其他图片:通过查各种资料,实现了,故在此记录下来 下面我们来看下实现步骤: 第一步:首先在项目index.html中引入swipe ...
- vue 卡片轮播 中间大两边小 复制代码就可使用
vue开发中遇到类似原生这种卡片轮播,中间大两边小的需求 网上搜了下,很多都是修改前一个和后一个的高度,然后设置了margin-top,但个人感觉这样病不能保证很好的居中,在研究了官网的demo后,发 ...
- ios中间大,两边小的轮播图
首先上图 , 中间大,两边小的轮播图 ,git地址 : https://github.com/guochaoshun/LunBoTu 主要参考代码 : https://github.com/orzzh ...
- html实现轮播图--小圆圈呈中间大两边小的样式
这个轮播图的样式是参照奔驰官网的,原始效果图大概是这样 轮播图下面的小圆圈呈现出中间大,两边小的效果.先来看看最终的成品: 分析:假设按照奔驰官网的一样,轮播的图片有6张.明显可以看出,每个大圆的一侧 ...
- 不等式大两边小中间_不等式取值范围口诀
不等式取值范围口诀2019-09-27 11:13:46文/宋则贤 不等式就是用大于,小于,大于等于,小于等于连接而成的数学式子.不等式取值范围口诀为同大取大,同小取小.大大小小没有解,大小小大取中间 ...
- 不等式大两边小中间_两边-还是小于取中间,大于取两边?是大于取中间, – 手机爱问...
2019-03-27 如何证明三角形两边之和大于第三边,两边之差小于第三边? 证明: 假设构成三角形的三条边分别为:a.b.c,且a.b.c大小任意: ①先证明:a+b>c: 因为a.b.c都为 ...
- swiper + vue 中间大两边小轮播图
展示效果 代码 字体16px 框架vuetify <template><v-main><div class="body_height ofs"> ...
- 微信小程序:轮播图中间大两边小、中间高亮显示
效果展示: test.wxml: <swiper display-multiple-items='1' current='{{ centerItem }}' bindchange='change ...
最新文章
- 我焦躁,并不只是心里承受,还是因为我上面担着。
- php不缓存直接输出,如何在PHP中禁用输出缓冲
- 平时的鸿星尔克VS开挂后的鸿星尔克
- Go 编码建议——项目布局
- 寻找电路布线最短路径算法BFS
- 阿里巴巴16字真言 | 管理者的基本要求是什么?
- 58-最小乘积(基本型)
- 华旭 身份证读卡器测试软件_华旭身份证读卡器阅读软件8.0版本 支持免驱
- 互联网知识变现,不起眼利润高的冷门行业有哪些?
- Android之UVC调试
- html 出现脚本错误,当前页面脚本发生错误,教您当前页面脚本发生错误的解决方法...
- ”消费全返“是割韭菜,非也,广告电商引领全新“全返”模式
- 数据结构循环队列C++实现
- 【翻译辅助】开源CAT翻译辅助软件OmegaT协同翻译
- ant design Vue 纯前端实现分页
- Nacos服务健康监测
- Spring+Netty+Vue 网页版聊天应用,仿微信网页版聊天
- 在线圆型针织内衣机织物CAD系统设计
- 如何系统地学习计算机科学与技术?六步帮你轻松自学
- ONEXBBC后台登录时需要shopexID