首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JS手撕(十一) 选择排序、快速排序

JS手撕(十一) 选择排序、快速排序 选择排序 原理 选择排序原理就是每次从未排序序列中选择最小元素,放到已排序序列的末尾。 那么如何选择最小元素,并把最小元素放到已排序序列的末尾?...图片来自菜鸟教程 JS实现 function selectSort(arr) { const len = arr.length; let minIndex; // 保存最小数的索引...稍微举例子说明一下为什么是不稳定的。 上面一开始2*是在2之后的,排序完之后2*变成在2之前了,所以选择排序是不稳定的。...它是不稳定的关键就是让最小数和已排序序列的末尾互换位置时,可能把大小相同的数中在前面的移动到了后面去。 快速排序 原理 快速排序原理就是: 从数组中挑出一个元素,称为基准(pivot)。...该操作称为分区操作(partition) 递归地把小于基准值地子序列和大于基准值地子序列排序 图片来自菜鸟教程 JS实现 function quickSort(arr, l, r) { if

2.3K20

js 实现选择排序及优化

// 选择排序 // 原理:进行 n-1 趟 循环,每趟循环中遍历所有未排好序的数,第一趟循环,从第0个元素开始向后遍历,找到 最小的元素,与第1 一个元素进行交换,第二趟,从第 1 个元素开始向后遍历...< 2) { return arr; } // 定义 count 代表执行了趟循环 let count = 0; // 维护每趟循环中的未排序序列中的最小值...j : minIndex; // 将最小数的索引保存 } // 交换最小中与未排序序列开始遍历的第一个值 temp = arr[i]; arr...return arr; } // 定义 count 代表执行了趟循环 let count = 0; // 维护每趟循环中的未排序序列中的最小值,默认设为第一个值...} } // 交换最小中与未排序序列开始遍历的第一个值 // 减少交换的次数 if (arr[i] !

4.6K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    js实现常用排序算法 --冒泡排序,选择排序, 插入排序,快速排序,

    JavaScript实现十大常用排序算法 冒泡排序 选择排序 插入排序 快速排序 归并排序 希尔排序 堆排序 计数排序 桶排序 计数排序 冒泡排序: 原理 选择排序: 原理: 第一次从待排序的数据元素中选出最小...(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。...以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。...代码如下: // 使用选择排序 const selectSort = (arr) => { let len = arr.length let minIndex,temp for(let i...([2,5,3,7,5,9,3,5,7,2,1]) console.log(`最终排序结果${res}`) 执行结果如下 插入排序 原理: 每步将一个待排序的记录,按其关键码值的大小插入前面已经排序的文件中适当位置上

    2K20

    排序——选择排序

    选择排序 --- 简单选择排序 基本思想 每一趟在后面 n-i +1个中选出关键码最小的对象, 作为有序序列的第 i 个记录 算法实现 void SelectSort(SqList &L){ // 对记录序列...L.length]作简单选择排序 for(i = 1; i <= L.length; i++){ // 选择第 i 小的记录,并交换到位 k = i; for(j = i + 1; j <...算法分析 含有n个叶子节点的完全二叉树的深度为log2 n+1,则选择排序的每一趟都需作log2n次比较,排序的时间复杂度O(nlog2n)。...需要辅助存储空间较多(n-1),和最大值作多余的比较等等。 改进:简单选择排序没有利用上次选择的结果,是造成速度满的重要原因。如果,能够加以改进,将会提高排序的速度。...--- 堆排序 堆:把待排序的数据元素存放在数组中r1…n,把r看成是一棵完全二叉树,每个结点表示一个记录。ri结点的左孩子是r2i,右孩子是r2i+1。

    908125

    选择排序(简单选择排序、堆排序)

    选择排序 选择排序的基本思想是:每一趟在待排序元素中选取关键字最小(或最大)的元素加入有序子序列。...简单选择排序 概念 假设排序表为L[1…N],,第i趟排序即从L[1…N]中选择关键字最小的元素与L(i)交换,每一趟排序可以确定一个元素的最终位置,这样经过n-1趟排序就可以使得整个排序表有序...= i) swap(A[i],A[min]); } } 堆排序 概念 堆排序要结合顺序存储的完全二叉树的特性进行学习。...堆排序的思路很简单:首先将存放在L[1…N]中的N个元素建成初始堆,由于堆本身的特点(以大根堆为例),堆顶元素就是最大值。...输出堆顶元素后,通常将堆底元素送入堆顶,此时根节点已不满足大顶堆的性质,对被破坏,将堆顶元素向下调整使其继续保持大顶堆的性质,再输出堆顶元素。如此重复,直到堆中仅剩一个元素为止。

    56310

    js中数组的sort()方法排序

    返回一个数组的引用,不会创建新的数组对象而是将原数组改变成排序后的数组。 无参调用: 如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,按照字符编码的顺序进行排序。...sort()方法会根据函数返回值来进行数组元素的交换。返回值如下: 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。 若 a 等于 b,则返回 0。...:"+newArr); 以上两种只是排序函数中最简单常用的,都可以将数组中的元素排序。...三.对sort(sortby)方法的理解: sort()方法主要依靠其回调函数来进行排序,回调函数中需要两个参数,在执行sort()方法时会调用回调函数,这时会将调用sort()方法的数组中的元素作为实参两两依次作为回调函数实参传入...以上是关于JS中sort函数的小结,后续遇到新的问题再继续更新!

    6.4K20

    选择排序之简单选择排序

    1.引言 一听到选择排序的词第一反应都是要通过选择来排序,那么我们的第一反应是不是对的呢,我们接下来验证一下,了解一下它的定义。...简单选择排序:最简单的选择方法是顺序扫描序列中的元素,记住遇到的最小元素(一次扫描完毕就找到了一个最小的元素。反复扫描就能完成排序工作)。...显然就是我们理解的那个意思,每次选择出序列最小的元素依次进行排序。 2.问题 给定一个序列,我们将如何用简单选择排序来将它排序好呢,下面将一一讲述。...此题我们是用简单选择排序来实现它,根据简单排序的定义,首先是找出序列中最小的,然后再找出第二小的(也就是除了上一次找出来的元素,从剩下的元素中找出最小的),重复去寻找直到排序完成,下面将由图示来展示这个过程...4.结语 方法是用到了直接选择排序算法的简单交换,也就是上述的交换两个元素的位置。这是我对简单选择排序的理解,或许还有更好的理解,我会继续研究。

    45110

    选择排序

    选择排序 思想 将数据分成两个部分:前面排好序和后面待排序的 从没有排序的数据选择出一个最小的数据,放在前面排好序的后面 不稳定 时间复杂度 最坏时间复杂度:O(n^2) 最优时间复杂度:O(n^...2) Python实现 def select_sort(alist): # 选择排序 n = len(alist) for j in range(0, n-1):...# 记录最小位置 min_index = j # 内层for循环找到了后面未排序数据的最小值 for i in range(j+1, n):...= alist[min_index], alist[j] return alist Golang实现 package main // 算法思想 // 将数据分成两个部分:前面排好序和后面待排序的...// 指定一个基准元素,将基准元素和后面的每个元素进行比较 // 从没有排序的数据(后面未排序)选择出一个最小的数据,放在前面排好序的后面 import "fmt" func selectSort

    30210

    选择排序

    排序方法 选择排序(Selection sort)、插入排序(Insertion sort)与气泡排序(Bubble sort)这三个排序方式是初学排序所必须知道的三个基本排序方式,它们由于速度不快而不实用...选择排序 选择排序法原理: 将要排序的对象分作两部份,一个是已排序的,一个是未排序的,从后端未排序部份选择一个最小值,并放入前端已排序部份的最后一个, 例如: 排序前:70 80 31 37 10 1...第一个 for 循环是确定位置的,该位置是存放每次从待排序数列中经选择和交换后所选出的最小数。第二个 for 循环是实现将确定位置上的数与后面待排序区间中的数进行比较的。...定义变量及数组为基本整型 printf("请输入10个数:\n"); for(i=;i<;i++) scanf("%d",&a[i]); //从键盘中输入要排序的...526 技术要点: 选择排序的基本算法是从待排序的区间中经过选择和交换后选出最小的数值存放到 a[0] 中,再从剩余的未排序区间中经过选择和交换后选出最小的数值存放到 a[1] 中,a[1] 中的数字仅大于

    16410

    选择排序

    选择排序 思想(从小到大) 每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕 分析 假设数组中有个n元素 第一趟:在整个数组中选择出最小的元素,和数组中的第一个元素交换位置...,那么此时的第一个元素就是最小的 第二趟: 从第二个元素开始再次查找剩余数组中最小的元素,和数组中的第二个元素交换位置,那么此时的第一个和第二个元素就是最小的 第三趟: 从第三个元素开始再次查找剩余数组中最小的元素...,和数组中的第三个元素交换位置,那么此时的前三个就是从小到大的排序 第四趟………………………….第n-1趟 选择排序 思想(从小到大) 每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,...直到全部记录排序完毕 分析 假设数组中有个n元素 第一趟:在整个数组中选择出最小的元素,和数组中的第一个元素交换位置,那么此时的第一个元素就是最小的 第二趟: 从第二个元素开始再次查找剩余数组中最小的元素...,和数组中的第二个元素交换位置,那么此时的第一个和第二个元素就是最小的 第三趟: 从第三个元素开始再次查找剩余数组中最小的元素,和数组中的第三个元素交换位置,那么此时的前三个就是从小到大的排序 第四趟…

    41380
    领券