摘要:然后再分别对基数左边和右边的数组进行相同的操作,直到数组中只有一个元素时,返回该数组。
快速排序算法
今天大概讲下使用js实现快速排序算法:
快速排序算法的思想类似于二分法,每次都是在数组中选择一个基数(可以是任意一个位置的数,不过一般选择中间的数字或者最左边的数字),每一轮结束后,比该基数小的数都位于该基数的左边,比该基数大的数都位于该基数的右边。然后再分别对基数左边和右边的数组进行相同的操作,直到数组中只有一个元素时,返回该数组。不说了,具体上代码(我取数组最左边的元素作为基数):
var arr=[5,7,2,9,3,8,4,7,1]; // 每次选择最左边的数作为基数 function quickSort(arr){ if (arr.length<2) { return arr; } // 定义左指针 var left=0; // 定义右指针 var right=arr.length-1; //开启每一轮的排序 while(left=arr[0] && left 问题:为什么如果基数选择数组最左边元素,每次移动必须右指针先移动找到比基数小的数?同理选择右边,要先移动左指针?
回答:解决问题时可以有时候把问题放到极限情况下,这样更加便于我们直观的观察和分析
我们假设如果基数选择数组最左边元素,而我们选择先移动左指针。如果先移动左指针,则此时左指针与右指针相遇,此时交换arr[0]与arr[right],交换后如第二张图所示,本来交换后位于红色7左边的元素应该都小于等于7,但是此时8位于7的左边,明显不符合要求。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/94285.html
摘要:用冒泡排序快速排序选择排序冒泡排序冒泡排序是比较经典的排序方法,是一种用时间换空间的排序方法。找到并交换的时候,指针位置不变。选择排序没趟都会产生最小值,它不是相邻元素的比较而是在该元素设置一个索引。选择排序循环找到从开始到最后的最小的数 用js冒泡排序,快速排序,选择排序 1.冒泡排序 冒泡排序是比较经典的排序方法,是一种用时间换空间的排序方法。我总结了一下它的特点:(1)它的时间复...
摘要:所有关键字比该记录关键字小的记录放置在前一部分,所有比它大的记录放置在后一部分,并把改记录排在这两部分的中间称为该记录归位,这个过程称作一次快速排序。代码如下大佬的代码还是比较厉害的,简单易懂,佩服以上就是相关的快速排序的实现方法 由于自己不是计算机专业,数据结构没有太多研究,曾经面试时有被问过关于快速排序以及冒泡排序的写法,冒泡排序比较简单,当时能回答出来,但是快速排序当时就比较懵逼...
摘要:快速排序英语,又称划分交换排序,简称快排,一种排序算法,最早由东尼霍尔提出。 快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort),简称快排,一种排序算法,最早由东尼·霍尔提出。在平均状况下,排序n个项目要O(nLogn)次比较。在最坏状况下则需要O(n^2)次比较,但这种状况并不常见。事实上,快速排序O(nLogn)通常明显比其他算...
摘要:公共函数库用于取出随机排列的数字原数组给原数组赋值排序算法插入排序时间复杂度二分法插入排序选择排序快速排序一堆排序测试用例插入排序时间测试二分法插入排序时间测试选择排序时间测试快速排序时间测试一堆 公共函数库(用于取出随机排列的数字) module.exports={ randomIntegerArray:function(count){ var origina...
摘要:快速排序是一种划分交换排序。快速排序基于冒泡递归分治。他在大数据情况下是最快的排序算法之一,平均事件复杂度很低而且前面的系数很小,在大量随机输入的情况下最坏情况出现的概率是极小的。 快速排序是一种划分交换排序。它采用了一种分治的策略,通常称其为分治法。 分治法的基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。...
阅读 2751·2021-11-02 14:42
阅读 3146·2021-10-08 10:04
阅读 1169·2019-08-30 15:55
阅读 1003·2019-08-30 15:54
阅读 2293·2019-08-30 15:43
阅读 1662·2019-08-29 15:18
阅读 845·2019-08-29 11:11
阅读 2331·2019-08-26 13:52