Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java.util包中数组的排序算法 /** *将指定的字节子数组按升序排序。 */ 专用静态无效sort1(字节x[],整数关闭,整数长度){ //最小数组的插入排序 if(lenx[j];j--) 互换(x,j,j-1); 返回; }_Java_Algorithm - Fatal编程技术网

Java.util包中数组的排序算法 /** *将指定的字节子数组按升序排序。 */ 专用静态无效sort1(字节x[],整数关闭,整数长度){ //最小数组的插入排序 if(lenx[j];j--) 互换(x,j,j-1); 返回; }

Java.util包中数组的排序算法 /** *将指定的字节子数组按升序排序。 */ 专用静态无效sort1(字节x[],整数关闭,整数长度){ //最小数组的插入排序 if(lenx[j];j--) 互换(x,j,j-1); 返回; },java,algorithm,Java,Algorithm,来自Arrays.java第804-814行 如上所述,它声称使用插入排序。 然而,我把它当作泡泡排序? 这整个排序算法是一个优化的快速排序算法,使用3个索引元素的中间值来获得枢轴元素,而您展示的代码是一个优化,当输入数组(或递归)很小时 尽管如此,引用的部分无疑是一种插入排序 但这是错误的,看看算法的这一部分,所以: 第573-577行对小型输入数组进行插入排序 第581-593行使用中位数3选择轴元素 第596-611行使用pivot元素进行排序 第614-616行将分区元素放回中间(快速

来自Arrays.java第804-814行

如上所述,它声称使用插入排序。 然而,我把它当作泡泡排序?
这整个排序算法是一个优化的快速排序算法,使用3个索引元素的中间值来获得枢轴元素,而您展示的代码是一个优化,当输入数组(或递归)很小时

尽管如此,引用的部分无疑是一种插入排序

但这是错误的,看看算法的这一部分,所以:

  • 第573-577行对小型输入数组进行插入排序
  • 第581-593行使用中位数3选择轴元素
  • 第596-611行使用pivot元素进行排序
  • 第614-616行将分区元素放回中间(快速排序)
  • 第619-622行是输入数组两半的递归

有关快速排序的详细说明,请访问。

对于已排序的数组,冒泡排序的外循环只运行一次,但插入的外循环运行n次(尽管每个外循环只有1次比较)


我认为很明显,这是插入排序。

引用的代码是插入排序。冒泡排序重复通过整个数组,而插入排序排序第一个元素,然后是前两个元素,然后是前三个元素,等等。您可以分辨出来,因为代码有两个索引循环,而外部循环在冒泡排序只检查整个数组是否有序。

冒泡排序只交换位于连续索引中的元素


更新:源代码中的注释可能错误:-)

“我将其视为冒泡排序?”这是什么意思?它的意思是“对我来说,它看起来像冒泡排序”。(链接到Arrays.java:)对我来说,它看起来确实像冒泡排序。是的,这看起来像冒泡。但该方法没有结束。它只是长度<7的arry的一段代码。
 /**
 * 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;
}