Chinaunix首页 | 论坛 | 博客
  • 博客访问: 817614
  • 博文数量: 62
  • 博客积分: 526
  • 博客等级: 二等列兵
  • 技术积分: 2078
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-04 20:41
个人简介

博客迁移至 freefe.cc

文章分类

全部博文(62)

分类: 系统运维

2012-08-05 23:42:19

对于数字的从大到小排序,我们应该依旧记得,刚刚学习编程语言是那种经典的算法-冒泡法。那属于一种简单的但是并不高效的算法。

今天来说一下另一种简单的算法-快速排序。快速排序的思想是,将数字头作为base数,进行判断排序后将小于base数的置于base数左侧,大于base数的置于base数右侧,再以现在的base数作基准,将左右2侧的子数组同样处理。

第一步方法为:

  1. function division(arr,l,r){
  2.     var base = arr[l];
  3.     while(l<r){
  4.         while(l<r&&arr[r]>=base){
  5.             r--;
  6.         }
  7.         arr[l] = arr[r];

  8.         while(l<r&&arr[l]<=base){
  9.             l++;
  10.         }
  11.         arr[r] = arr[l];
  12.     }
  13.     arr[l] = base;
  14.     return l;
  15. }
第二步为迭代循环:

  1. function list(arr,l,r){
  2.      if(l<r){
  3.           var i = division(arr,l,r);
  4.           arguments.callee(arr,l,i-1);
  5.           arguments.callee(arr,i+1,r);
  6.      }
  7. }

使用它:

  1. var arr = [92,23,45,22,53,74,24,7];
  2. list(arr,0,7);
这里是在原数组进行处理的。

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