如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。 如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:
若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。 若 a 等于 b,则返回 0。 若 a 大于 b,则返回一个大于 0 的值。
procedure bubbleSort( A : list of sortable items )
n = length(A)
repeat
swapped = false
for i = 1 to n-1 inclusive do
/* if this pair is out of order */
if A[i] < A[i - 1] then
/* swap them and remember something changed */
swap( A[i-1], A[i] )
swapped = true
end if
end for
until not swapped
end procedure
if A[i] < A[i - 1]是用来进行大小比较的,但是如果对一些自定义对象进行排序或者想自定义排序方式,就可以传入一个比较函数compare,这个函数的返回值决定元素的大小。
前两天刚好查看了一下sort函数的运用,引用看到的一段文字(理解下面这段文字就应该可以明白了):
若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
若 a 等于 b,则返回 0。
若 a 大于 b,则返回一个大于 0 的值。
你可以直接查看网址:http://www.w3school.com.cn/jsref/jsref_sort.asp
sort内部实现的其实是抽象的
快速排序算法,封装的函数接口,是为了让你决定排序的顺序。为什么要让你来决定排序的顺序呢?因为数组内可以保存的数据可能不是数字,而是一个对象:这样算法在需要判断大小的时候将对象抛出来,你就有可以去判断对象“谁大谁小”了,既然算法知道了谁大谁小,那顺序自然也就排出来了。
关于快速排序,比较好的文章(资料虽然是英文的,里面的图解通俗易懂,看不下去可以自己百度“快速排序”):
https://github.com/hollance/swift-algorithm-club/tree/master/Quicksort
在排序中需要对元素的大小进行比较,
compare函数相当于编程者显式告诉排序函数如何决定元素的大小关系。比如下面的冒泡排序伪代码:
if A[i] < A[i - 1]是用来进行大小比较的,但是如果对一些自定义对象进行排序或者想自定义排序方式,就可以传入一个比较函数compare,这个函数的返回值决定元素的大小。等价于把
if A[i] < A[i - 1]替换成if compare(A[i], A[i - 1]) > 0,其它部分都保持不变.对于其它快速排序、堆排序、归并排序等等是类似的。
sort()方法中的函数是用户定义排序规则的,只是一个排序的规则,不用想太复杂,上面的例子是比较的数字。
再例如,如果要比较的不是数字,而是对象呢,举例说明:
用插入排序演示一下:
参考排序算法