快速排序(Quicksort)是对冒泡排序的一种改进。

  它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列

详细描述:首先在要排序的序列 a 中选取一个中轴值,而后将序列分成两个部分,其中左边的部分 b 中的元素均小于或者等于 中轴值,右边的部分 c 的元素 均大于或者等于中轴值,而后通过递归调用快速排序的过程分别对两个部分进行排序,最后将两部分产生的结果合并即可得到最后的排序序列。

js实现

//交换数据
function swap(arr,i,j){
arr[i]=arr[i]+arr[j];
arr[j]=arr[i]-arr[j];
arr[i]=arr[i]-arr[j];
return arr;
} //快排,一般index设置为0,从第一个数值开始
function fastSort( arr, left, right, index){
let tmp = arr[index];
//左边和右边是否相同,不同继续寻找
while( right!=left){
//从最右边找到一个比基准值小的数据,则进行交换
while(arr[right] <= tmp ){
right--;
swap(arr,index,right);
index = right;
}
//从最左边找到一个比基准值大的数据,则进行交换
while(arr[left] >= tmp ){
left++;
swap(arr,index,left);
index = left;
} //以基准值索引为界,分别对其做序列以及有序列进行继续排序
fastSort(arr, left, index-1);
fastSort(arr, index+1, right);
}
return arr;
}

最新文章

  1. .NET平台开源项目速览(7)关于NoSQL数据库LiteDB的分页查询解决过程
  2. SQL SERVER 2005删除维护作业报错:The DELETE statement conflicted with the REFERENCE constraint &quot;FK_subplan_job_id&quot;
  3. [MySQL]使用Begin...End语句的一个坑
  4. Swift:闭包
  5. ASP.NET泛型List的各种用法Skip、Take等
  6. android 界面设计基本知识Ⅲ
  7. (2016春) 作业1:博客和Github简单练习
  8. linq世界走一走(LINQ TO SQL)
  9. Date Picker Calendar For Oracle Forms 6i
  10. java中的native方法和修饰符(转)
  11. j疑难杂症:ava.lang.NoSuchMethodError: com.opensymphony.xwork2.util.finder.ClassFinder.&lt;init&gt;
  12. 破解中国电信华为无线猫路由(HG522-C)自己主动拨号+不限电脑数+iTV
  13. mysql中 的 ENGINE = innodb; 是什么意思?
  14. Binary Tree Preorder Traversal —— LeetCode
  15. CSS Flex
  16. python3抓图学习-百度贴吧
  17. 消息队列_MSMQ(1)简单了解
  18. mysql 字符集
  19. 小程序for循环绑定每组数据的id,并通过id获取里面某个数组的值的方法
  20. RecyclerView中设置match_parent无效;

热门文章

  1. H264基础简介
  2. 以太坊Geth通过私钥导入新地址到钱包步骤
  3. linux高可用集群(HA)原理详解
  4. .IllegalArgumentException: Mapped Statements collection does not contain 异常一例【我】
  5. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_20-页面静态化-静态化测试-填写页面DataUrl
  6. 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_01-vuejs研究-vuejs介绍
  7. Qt编写自定义控件34-磁盘容量统计
  8. 安装完 MySQL 后必须调整的 10 项配置(转)
  9. C#程序 界面显示运行信息
  10. 初识MyBatis之HelloWorld