/**
* Sorts the specified sub-array of bytes into ascending order.
*/
private static void sort1(byte x[], int off, int len) {
// Insertion sort on smallest arrays
if (len < 7) {
for (int i=off; i<len+off; i++)
for (int j=i; j>off && x[j-1]>x[j]; j--)
swap(x, j, j-1);
return;
}
来自Arrays.java第804-814行
如上所述,它声称使用了Insertion Sort。 但是,我把它当作冒泡排序? 它实际上是哪一个,为什么?
答案 0 :(得分:4)
引用的代码是插入排序。冒泡排序反复遍历整个数组,而插入排序则对第一个元素进行排序,然后对前两个元素进行排序,然后对前三个元素进行排序等等。您可以判断,因为代码有两个索引循环,而外部循环则是冒泡排序只是检查整个数组是否有序。
答案 1 :(得分:3)
这整个排序算法是一个优化的快速排序,它使用3个索引元素的中值来获取pivot元素,而你显示的代码是输入数组(或递归)的小优化。
虽然,引用的部分是插入排序,毫无疑问。
但是只看这部分算法是错误的,using this link:
关于快速排序的一个很好的解释可以在http://en.wikipedia.org/wiki/Quicksort找到。
答案 2 :(得分:0)
对于已排序的数组,冒泡排序的外循环只进行一次,但插入的外循环运行n次(尽管每个外循环只有1次比较)。
我认为很明显它是插入排序。
答案 3 :(得分:0)
冒泡排序仅交换位于连续索引处的元素。
更新:源代码中的注释可能有误: - )