Java Arrays.parallelSort()方法

原文:https://www.studytonight.com/java-util/java-arrays-parallelsort-method

在本教程中,我们将学习 Java数组类的parallelSort()方法。这种排序技术非常快,因为它可以并行地对给定数组的元素进行排序。这种排序算法是弗拉基米尔·雅罗斯拉夫斯基、乔恩·本特利和乔什·布洛赫的双枢轴快速排序。该算法在所有数据集上提供 O(n log(n))性能,通常比传统的(单轴)快速排序实现更快。

句法

parallelSort(datatype[] array)

此方法接受数组作为参数,并在排序后返回它。

parallelSort()方法重载方法列表

此表包含parallelSort()方法的所有重载变体。

方法 描述
静态无效并行启动(字节[] a) 此方法将指定的数组按升序排列。
静态 void parallelSort(字节[] a,int fromIndex,int toIndex) 此方法将数组的指定范围按升序排列。
静态无效并行测试(char[] a) 此方法将指定的数组按升序排列。
静态空平行(char[] a,int fromIndex, int toIndex) 此方法将数组的指定范围按升序排列。
静态空位平行测试(双[] a) 此方法将指定的数组按升序排列。
静态空平行(双[] a,int fromIndex, int toIndex) 此方法将数组的指定范围按升序排列。
静态空平行启动(浮动[] a) 此方法将指定的数组按升序排列。
静态空平行(浮动[] a,int fromIndex, int toIndex) 此方法将数组的指定范围按升序排列。
静态无效并行测试(int[] a) 此方法将指定的数组按升序排列。
静态空平行(int[] a,int fromIndex, int toIndex) 此方法将数组的指定范围按升序排列。
静态空平行(长[] a) 此方法将指定的数组按升序排列。
静态空隙平行(长[] a,int fromIndex, int toIndex) 此方法将数组的指定范围按升序排列。
静态空隙平行测试(短[] a) 此方法将指定的数组按升序排列。
静态空隙平行测试(简称[] a,int fromIndex, int toIndex) 此方法将数组的指定范围按升序排列。
静态>无效并行(T[] a) 此方法根据元素的自然顺序,将指定的对象数组按升序排序。
静态>无效平行排序?(T[] a,int fromIndex,int toIndex) 此方法根据元素的自然顺序,将指定对象数组的指定范围按升序排序。
静态无效并行(T[] a,int fromIndex,int toIndex,Comparator super T> cmp) 此方法根据指定Comparator引发的顺序对指定对象数组的指定范围进行排序。
静态无效并行(T[] a,Comparator super T> cmp) 此方法根据指定Comparator引发的顺序对指定的对象数组进行排序。

【parallelSort()是如何工作的?

该方法在以下步骤中工作

  1. 递归划分数组,直到到达单个元素。
  2. 所有单独的元素都在多个线程上排序。
  3. 所有的子数组被合并得到一个排序的数组。

示例:使用parallelSort()方法对数组进行排序

在下面的例子中,首先我们有一个未排序的整数数组。应用parallelSort() 方法后,所有元素都被排序,并且可以在从数组中打印每个元素后进行验证。

import java.util.Arrays;
class StudyTonight { 
    public static void main(String args[]) 
    { 
        int arr[] = {1, 46, 165, 6, 78, 6, 65, 955, 4, 5, 323, 256, 5, 99, 22, 33};
        //sorting an array
        Arrays.parallelSort(arr);        
        for(int num:arr)
        {
            System.out.print(num+" ");
        }
    } 
}

1 4 5 6 6 22 33 46 65 78 99 165 256 323 955

示例:使用具有特定范围的parallelSort()方法对数组进行排序

在下面的程序中,我们可以看到给定的未排序数组 arr 只排序到前八个元素,这是因为我们在方法中传递了一个 startIndexendIndex ,这是一个parallelSort()的重载方法。

import java.util.Arrays;
class StudyTonight { 
    public static void main(String args[]) 
    { 
        int arr[] = {5, 7, 1, 9, 8, 11, 2, 36, 1, 22, 34, 18, 17, 22, 13 };
        //sorting first eight array elements only
        Arrays.parallelSort(arr, 0, 7);        
        for(int num:arr)
        {
            System.out.print(num+" ");
        }
    } 
}

1 2 5 7 8 9 11 36 1 22 34 18 17 22 13

示例:使用带变量的parallelSort()对数组进行排序

import java.util.Arrays;
class StudyTonight { 
    public static void main(String args[]) 
    { 
        float arr[] = {5, 7, 1, 9, 8, 11, 2, 36, 1, 22, 34, 18, 17, 22, 13 };
        System.out.println("Array Before Sorting:");
        for(float num:arr)
        {
            System.out.print(num+" ");
        }
        System.out.println("\nArray Sorting from 0 to 6:");
        Arrays.parallelSort(arr, 0, 7);        
        for(float num:arr)
        {
            System.out.print(num+" ");
        }
        System.out.println("\nArray After Sorting as a Whole:");
        Arrays.parallelSort(arr);        
        for(float num:arr)
        {
            System.out.print(num+" ");
        } 
    } 
}

排序前数组: 5.0 7.0 1.0 9.0 8.0 11.0 2.0 36.0 1.0 22.0 34.0 18.0 17.0 22.0 13.0 从 0 到 6 的数组排序: 1.0 2.0 5.0 7.0 8.0 9.0 11.0 36.0 1.0 22.0 34.0 18.0 17.0 22.0 10

parallelSort()的所有重载方法示例

在下面的程序中,我们一起实现了parallelSort() 的所有重载方法。我们在不同的数据类型和不同的范围上实现了这个方法。从这个程序的输出,我们可以很容易地关联排序是如何在不同的数组上执行的。

import java.util.Arrays;
public class StudyTonight 
{
    public static void main(String[] args) 
    {
        byte byteArray[] = {5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60}; 
        Arrays.parallelSort(byteArray,0,5);
        System.out.println("Arrays.parallelSort(byteArray,0,5): "+Arrays.toString(byteArray));
        Arrays.parallelSort(byteArray);
        System.out.println("Arrays.parallelSort(byteArray): "+Arrays.toString(byteArray));        

        char charArray[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k'}; 
        Arrays.parallelSort(charArray,0,5);
        System.out.println("Arrays.parallelSort(charArray,0,5): "+Arrays.toString(charArray));
        Arrays.parallelSort(charArray);
        System.out.println("Arrays.parallelSort(charArray): "+Arrays.toString(charArray));

        int intArray[] = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150};
        Arrays.parallelSort(intArray,0,5);
        System.out.println("Arrays.parallelSort(intArray,0,5): "+Arrays.toString(intArray));
        Arrays.parallelSort(intArray);
        System.out.println("Arrays.parallelSort(intArray): "+Arrays.toString(intArray));

        double doubleArray[] = {5.1, 6.2, 7.2, 8.1, 9.4, 10.2, 11.6, 12.96, 13.2, 14.25, 15.6, 16.4, 17.2}; 
        Arrays.parallelSort(doubleArray,0,5);
        System.out.println("Arrays.parallelSort(doubleArray,0,5): "+Arrays.toString(doubleArray));
        Arrays.parallelSort(intArray);
        System.out.println("Arrays.parallelSort(doubleArray): "+Arrays.toString(doubleArray));

        float floatArray[] = {1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f, 10f}; 
        Arrays.parallelSort(floatArray,0,5);
        System.out.println("Arrays.parallelSort(floatArray,0,5): "+Arrays.toString(floatArray));
        Arrays.parallelSort(floatArray);
        System.out.println("Arrays.parallelSort(floatArray): "+Arrays.toString(floatArray));

        short shortArray[] = {2, 4, 6, 8, 10 ,12, 14, 16, 18, 20}; 
        Arrays.parallelSort(shortArray,0,5);
        System.out.println("Arrays.parallelSort(shortArray,0,5): "+Arrays.toString(shortArray));
        Arrays.parallelSort(shortArray);
        System.out.println("Arrays.parallelSort(shortArray): "+Arrays.toString(shortArray));
    }
}

数组。并行排序(字节数组,0,5): [5,10,15,20,25,30,35,40,45,50,55,60] 数组。并行排序(字节数组):[5,10,15,20,25,30,35,40,45,50,55,60] 数组。并行排序(字符数组,0,5): [a,b,c 90,100,110,120,130,140,150] 数组. parallels art(double array,0,5):【5.1,6.2,7.2,8.1,9.4,10.2,11.6,12.96,13.2,14.25,15.6,16.4,17.2】 数组. parallels art(double array):【5.1,6.2

结论

在本教程中,我们学习了如何使用parallelSort() 对给定的未排序数组进行高效排序。该方法使用分叉/连接概念对数组进行排序。这种排序算法是弗拉基米尔·雅罗斯拉夫斯基、乔恩·本特利和乔什·布洛赫的双枢轴快速排序。该算法在所有数据集上提供 O(n log(n))性能,通常比传统的(单轴)快速排序实现更快。