获取数组排序后的index算法实现

需求:

一个数组var arr = [4,7,2,9],排序后的新数组var newArr = [2,4,7,9]或者[9,7,4,2]

我们要得到的是排序后元数组的每一项在新数组中的位置所构成的数组:[2,4,7,9]对应[1,2,0,3]/[9,7,4,2]对应[2,1,3,0]

方案一:

 1 Array.prototype.getIndex = function () {
 2     var orderLength = this.length;
 3     var temp, tp;
 4     var c = [];
 5     for(var l = 0; l < orderLength; l++) {
 6         c[l] = l;
 7     }
 8     for(var u = 0; u < orderLength; u++) {
 9         for (var v = 0; v < orderLength-u-1; v++){
10             if (this[v] > this[v+1]) {
11                 temp = this[v];
12                 this[v] = this[v+1];
13                 this[v+1] = temp;
14                 tp = c[v];
15                 c[v] = c[v+1];
16                 c[v+1] = tp;
17             }
18         }
19     }
20     return c;
21     //return this;
22 }
23 var arr = [4,7,2,9];
24 console.log(arr.getIndex());

方案二:

 1 var a = [4,7,2,9];
 2 var newArr = [];
 3 for (var i = 0, n = a.length; i < n; ++i) {
 4     newArr.push({
 5         data: a[i],
 6         index: i
 7     })
 8 }
 9 newArr.sort(function (a, b) {
10     return a.data - b.data;
11 })
12 var index = [];
13 for (var i = 0, n = newArr.length; i < n; ++i) {
14     index.push(newArr[i].index);
15 }
16 console.log(newA);

本人愚笨只想到这两种解决方案,求更好的方案

时间: 2024-11-14 17:07:26

获取数组排序后的index算法实现的相关文章

算法——O(n)解决无序数组排序后的相邻最大差值

题目从这儿看到的 : https://mp.weixin.qq.com/s/2OXg67MfBuQjDPAJxxD8rQ,但是公众号上有一点讲错了,问题还挺严重的. 题目:有一个无序数组2,3,1,4,6,排序后是1,2,3,4,6,最大差值是 6 - 4 = 2. 先找到数组的max和min. 创建一个长度为N+1的桶,第一个桶存储最小值,最后一个桶存储最大值. 除去第一个和最后一个,也就是N-2个数往N-1个桶里放,那么至少会有一个桶为空. 遍历新数组Array,计算每一个非空桶中的最小值,

【javascript】js 获取 url 后的参数值

以前写过一篇类似的博文(提取 url 的搜索字符串中的参数),但是个人觉得使用起来不是很方便,今天抽空重新写了个函数,该函数代码更加简洁. //获取 url 后的参数值 function getUrl(para){ var paraArr = location.search.substring(1).split('&'); var paraObj = {}; for(var i = 0;k = paraArr[i];i++){ paraObj[k.substring(0,k.indexOf('=

Ajax获取数据后append追加到表格内出现格式混乱的错误

Ajax获取数据后append追加到表格内出现追加的数据与表格风格不同的错误: $("#courierTable").append("<tr style='text-align: center'> class='tab-content'") $("#courierTable").append("<tr style='text-align: center'> class='tab-content'") $

Jquery插件 防刷新倒计时 “点击获取验证码后60秒内禁止重新获取

Jquery插件实现"点击获取验证码后60秒内禁止重新获取(防刷新)" 效果图: 先到官网(http://plugins.jQuery.com/cookie/)下载cookie插件,放到相应文件夹,代码如下: 1 <style type="text/css"> 2 * {margin: 0; 3 padding: 0; 4 font-family: "Microsoft Yahei"; 5 } 6 .captcha-box { 7 w

jquery获取元素索引值index()

jquery获取元素索引值index()方法实例. jquery获取元素索引值index()方法: jquery的index()方法 搜索匹配的元素,并返回相应元素的索引值,从0开始计数. 如果不给 .index() 方法传递参数,那么返回值就是这个jQuery对象集合中第一个元素相对于其同辈元素的位置. 如果参数是一组DOM元素或者jQuery对象,那么返回值就是传递的元素相对于原先集合的位置. 如果参数是一个选择器,那么返回值就是原先元素相对于选择器匹配元素中的位置.如果找不到匹配的元素,则

JS获取渲染后的样式

一般我们利用element.style.属性来获取CSS的样式,而此方法只能获取标签内的样式,无法获取头部或引入的样式,因此,而我们又需要获取其样式,则我们可以使用:(其中element为标签,proName为属性)document.defaultView.getComputedStyle(element)[proName]的方法获其样式,而此方法不支持IE6~IE8,因此我们针对IE8以下的使用element.currentStyle[proName] 我们可以通过下面方法使其兼容 1 /*

获取分组后取某字段最大一条记录

获取分组后取某字段最大一条记录 方法一:(效率最高) select * from test as a where typeindex = (select max(b.typeindex) from test as b where a.type = b.type );

获取分组后的TOP 1和TOP N记录

MySQL获取分组后的TOP 1和TOP N记录 有时会碰到一些需求,查询分组后的最大值,最小值所在的整行记录或者分组后的top n行的记录,在一些别的数据库可能有窗口函数可以方面的查出来,但是MySQL没有这些函数,没有直接的方法可以查出来,可通过以下的方法来查询. 准备工作 测试表结构如下: root:test> show create table test1\G *************************** 1. row *************************** T

JS-DOM:获取计算后的样式(同时兼容IE跟其他浏览器)

HTML部分 <div id="div1" style="">打发第三方</div> CSS部分 <style type="text/css">#div1{    height: 100px;    width: 100px;    font-size: 12px;    background-color: #ccc;}</style> JS部分 方法一: <script> window