数组的排序

 快速排序

思路:

(1)在数据集之中,选择一个元素作为”基准”(pivot)。 
(2)所有小于”基准”的元素,都移到”基准”的左边;所有大于”基准”的元素,都移到”基准”的右边。 
(3)对”基准”左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。

function quickSort(arr){
if (arr.length <= 1){return arr};
var pivotIndex = Math.floor(arr.length / 2);
var pivot = arr.splice(pivotIndex,1)[0];
var left = [];
var right = [];
for (var i = 0; i < arr.length; i++){
if(arr[i] < pivot) {
left.push(arr[i]);
}else{
right.push(arr[i]);
}
}
return quickSort(left).concat([pivot],quickSort(right));
}

数据去重

第一种方法:(不推荐)

思路:

1.构建一个新的数组存放结果

2.for循环中每次从原数组中取出一个元素,用这个元素循环与结果数组对比

3.若结果数组中没有该元素,则存到结果数组中

Array.prototype.unique1 = function()
{
var n = []; //一个新的临时数组
for(var i = ; i < this.length; i++) //遍历当前数组
{
//如果当前数组的第i已经保存进了临时数组,那么跳过,
//否则把当前项push到临时数组里面
if (n.indexOf(this[i]) == -) n.push(this[i]);
}
return n;
}

第二种方法:比上面的方法效率要高,但是还是不推荐

思路:

1.先将原数组进行排序

2.检查原数组中的第i个元素 与 结果数组中的最后一个元素是否相同,因为已经排序,所以重复元素会在相邻位置

3.如果不相同,则将该元素存入结果数组中

Array.prototype.unique2 = function()
{
this.sort();
var re=[this[]];
for(var i = ; i < this.length; i++)
{
if( this[i] !== re[re.length-])
{
re.push(this[i]);
}
}
return re;
}

第三种方法:推荐

思路:

1.创建一个新的数组存放结果

2.创建一个空对象

3.判断数组值是否已经保存在object中,未保存则push到新数组并用object[arrayItem]=1的方式记录保存

Array.prototype.unique3 = function(){
var res = [];
var json = {};
for(var i = ; i < this.length; i++){
if(!json[this[i]]){
res.push(this[i]);
json[this[i]] = ;
}
}
return res;
} var arr = [,,,'你好',,,,'你好','str','str1'];
alert(arr.unique3());

转自http://www.jb51.net/article/42090.htm

最新文章

  1. 工业串口和网络软件通讯平台(SuperIO 2.0)发布
  2. Unity unsafe
  3. jackson中JSON字符串节点遍历和修改
  4. SQL SERVER--单回话下的死锁
  5. Nginx反向代理,负载均衡配置
  6. loadView/viewDidLoad/initWithNibName/awakeFromNib/initWithCoder的用法总结
  7. sql server数据库中 INFORMATION_SCHEMA的用法
  8. CodeChef Little Elephant and Mouses [DP]
  9. [CF438D]The Child and Sequence【线段树】
  10. oracle 死锁
  11. javascript:void(0) 和 href=&quot;#&quot;的区别
  12. iis发布----在XP中发布高版本web遇到问题总结
  13. P5157 [USACO18DEC]The Cow Gathering
  14. shell脚本实例-内存磁盘使用警告
  15. 通过 ulimit 改善系统性能
  16. Convolutional Restricted Boltzmann Machines
  17. Java之集合(二十四)ConcurrentLinkedDeque
  18. Git提交空文件夹的技巧
  19. Windows Server 2012部署第一台域控
  20. 35. Search Insert Position(二分查找)

热门文章

  1. ZOJ-1107-FatMouse and Cheese-dfs+记忆化搜索
  2. 本地项目通过 git 同步到 github
  3. django零散知识点
  4. DNA repair HDU - 2457 AC自动机+DP
  5. sqllocaldb
  6. soj98 卡牌
  7. 2-sat——hdu3062
  8. js获取网页屏高 屏宽
  9. 深入浅出Mybatis系列(六)---objectFactory、plugins、mappers简介与配置[转]
  10. 通过数据库中的表,使用 MyEclipse2017的反向生成工具--&gt;hibernate反转引擎引擎(MyEclipse2017自带的插件) 来反转生成实体类和对应的映射文件