quicksort
输入第一行为一个整数n,范围在1到1000之间(包含1和1000)。 第二行为n个用空格分隔的整数,范围在-1000到1000之间(包含-1000和1000),不会重复。 将划分过的子阵列输出成新的一行
快速排序是一个典型的分治算法,它的基本思想是:首先在数列中取一个元素作为基准(pivot),然后将所有小于它的元素放在它的左边,大于它的元素放在它的右边,这样就将数列以基准分成了两部分,随后再分别对这两部分继续重复上述步骤,依次进行下去,直至整个数列有序。快速排序算法是一种分治思想的算法,它将一个数组分为两部分,其中一部分的所有值都小于另一部分。它的原理是: 1. 选择一个基准值(pivot):通常会选择数组的第一个值作为基准值; 2. 将数组中的其他元素与基准值进行比较,将小于基准值的元素放到基准值的左边,大于基准值的元素放到基准值的右边; 3. 将基准值左边的子数组和右边的子数组分别用相同的方法进行排序,直至子数组的长度为 1,此时数组排序完成 可以使用快速排序算法来对数组进行排序
JavaScript 简称 JS,是目前最流行的编程语言之一。它是一门基于原型和一等函数的多范式高级解释型编程语言,支持面向对象编程、指令式编程和函数式编程。 JavaScript 通常运行于 Web 浏览器中,几乎每个网站都在使用它
玩了一下 Haskell 感觉 Haskell 很有趣,被它的 quicksort 的实现所吸引,花了一整天读官方的文档。感觉跟 lisp 很相象,但是比 lisp 更容易上手。 functional programming写出来的代码确实非常简洁,很多时候对函数编程比面向对象编程更有效
上述代码也是比较通俗易懂,自己生成一个随机数组测试,排序正确,所以功能上也没有问题。但上述代码还是有一个隐藏的小bug,当对同一个数组调用两次quickSort,发现第二次条用后出来的元素数量会比原始数据少一个。导致这个问题是根源是arr.splice(pivotIndex 1)[0],它会把arr中指定位置的元素删掉