Chinaunix首页 | 论坛 | 博客
  • 博客访问: 463657
  • 博文数量: 226
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2111
  • 用 户 组: 普通用户
  • 注册时间: 2014-06-20 09:02
个人简介

web web web

文章分类

全部博文(226)

文章存档

2020年(2)

2019年(1)

2018年(3)

2017年(26)

2016年(57)

2015年(60)

2014年(77)

我的朋友

分类: Web开发

2014-11-05 14:46:40

1.冒泡排序
  冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
    下面是一个简单的实现,是用冒泡排序的思想实现从大到小排序。PS:注意此处的双重循环,很显然一重循环只能排出一个最小数,还有就是使用temp作为中间量,比较两个值并交换:
function sorrt_arry(){
 var array=new Array(2,1,4,3,5);
 var temp;
 for(var j=0;j   for(var i=0;i    if(array[i]    {
      temp=array[i];
      array[i]=array[i+1];
      array[i+1]=temp; 
   }
  }
 }
 alert(array); 
}
sorrt_arry();

2.快速排序  
    快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
    "快速排序"的思想很简单,整个排序过程只需要三步:
1)在数据集之中,选择一个元素作为"基准"(pivot)。 
2)所有小于"基准"的元素,都移到"基准"的左边;所有大于"基准"的元素,都移到"基准"的右边。
3)对"基准"左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。

var quickSort = function(arr) {

  if (arr.length <= 1) { return arr; }   //检查数组的元素个数,如果小于等于1,就返回。
       var pivotIndex = Math.floor(arr.length / 2) ;   //选择"基准"(pivot),并将其与原数组分离,再定义两个空数组,用来存放一左一右的两个子集。

  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));   //使用递归不断重复这个过程,就可以得到排序后的数。
};
使用的时候,直接调用quickSort()就行了。

3.数组去重
    是将一个数组中重复的数据去除掉。一个简单的思路是:
    1.使用sort()让数组自动排序成从小到大的顺序,当然排序完重复的数据会出现在挨着的位置;
    2.new一个新的数组,将原来的数组中的数据一个一个往新数组里放,放的过程中要比较,如果新数组中已经存在的数据就不要再重复的放了,最后得到的新的数组就是去重后的数组了。
  
function sort_arry(){
     var arr=[1,2,3,1,3,1,4,2];
     arr.sort();
     var array1=new Array();
     array1[0]=arr[0];
    for(i=1;i    {
      if(arr[i]!=array1[array1.length-1])  
         array1.push(arr[i]);  
    }
    alert(array1);
}
sort_arry(); 

   另一种思路是:
   首先也是sort()排序,然后new一个新的数组,比较排序后的数组中相邻的两个数不一样的话就插入到新数组中,一样的话也是这个操作并少执行一次循环,最后得到的新最后得到的新的数组就是去重后的数组了。这里用到array.push(value)方法,也非常简单,实现如下:
 function sort_arry(){
     var arr=[1,2,3,3,1,4,2];
     arr.sort();
     var array1=new Array();
  for(i=0;i  {
      if(arr[i]==arr[i+1])
    {         
       array1.push(arr[i]);
       i++;
    }else{
         array1.push(arr[i]);
     }
 }
   alert(array1);
}
sort_arry();

阅读(368) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~