Java 排序

Java 排序

每当我们听到排序算法出现时,如选择排序、冒泡排序、插入排序、弧度排序、桶状排序等,但如果我们仔细观察,这里没有要求我们使用任何一种算法。它是借助java中的线性和非线性数据结构进行的简单排序。因此,在Java中,我们可以在循环的帮助下用蛮力进行排序,并且有两种内置的方法来进行排序。

在Java中进行排序的方法

  1. 使用循环
  2. 使用数组类的sort()方法
  3. 使用集合类的sort方法
  4. 对子数组进行排序

让我们讨论一下这四种方法,并为每一种方法提出一个代码。

方法1: 使用循环

// Java Program to sort an elements
// by bringing Arrays into play
 
// Main class
class GFG {
 
    // Main driver method
    public static void main(String[] args)
    {
 
        // Custom input array
        int arr[] = { 4, 3, 2, 1 };
 
        // Outer loop
        for (int i = 0; i < arr.length; i++) {
 
            // Inner nested loop pointing 1 index ahead
            for (int j = i + 1; j < arr.length; j++) {
 
                // Checking elements
                int temp = 0;
                if (arr[j] < arr[i]) {
 
                    // Swapping
                    temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
 
            // Printing sorted array elements
            System.out.print(arr[i] + " ");
        }
    }
}

输出

1 2 3 4 

时间复杂度: O(N2 )

辅助空间: O(1)

方法2: 使用Arrays类的sort()方法

Arrays.Sort()方法适用于原始数据类型的数组,默认为升序排序。

例子1

// Java program to demonstrate working of
// sort() method of Arrays class
 
// Importing Arrays class from java.util package
import java.util.Arrays;
 
// Main class
public class GFG {
 
    // Main driver method
    public static void main(String[] args)
    {
        // Custom input array
        int[] arr = { 13, 7, 6, 45, 21, 9, 101, 102 };
 
        // Calling the sort() method present
        // inside Arrays class
        Arrays.sort(arr);
 
        // Printing and display sorted array
        System.out.printf("Modified arr[] : %s",
                          Arrays.toString(arr));
    }
}

输出

Modified arr[] : [6, 7, 9, 13, 21, 45, 101, 102]

时间复杂度: O(N log N)

辅助空间: O(1)

例子2

// A sample Java program to sort an array
// in descending order using Arrays.sort().
import java.util.Arrays;
import java.util.Collections;
 
public class GFG {
    public static void main(String[] args)
    {
        // Note that we have Integer here instead of
        // int[] as Collections.reverseOrder doesn't
        // work for primitive types.
        Integer[] arr = { 13, 7, 6, 45, 21, 9, 2, 100 };
 
        // Sorts arr[] in descending order
        Arrays.sort(arr, Collections.reverseOrder());
 
        System.out.printf("Modified arr[] : %s",
                          Arrays.toString(arr));
    }
}

输出

Modified arr[] : [100, 45, 21, 13, 9, 7, 6, 2]

时间复杂度: O(N log N)

辅助空间: O(1)

方法3: 使用集合类的sort()方法

Collections.sort()适用于对象集合,如ArrayList和LinkedList。

例子

// Java program to demonstrate working of Collections.sort()
import java.util.*;
 
public class GFG {
    public static void main(String[] args)
    {
        // Create a list of strings
        ArrayList<String> al = new ArrayList<String>();
        al.add("Geeks For Geeks");
        al.add("Friends");
        al.add("Dear");
        al.add("Is");
        al.add("Superb");
 
        /* Collections.sort method is sorting the
        elements of ArrayList in ascending order. */
        Collections.sort(al);
 
        // Let us print the sorted list
        System.out.println("List after the use of"
                           + " Collection.sort() :\n" + al);
    }
}

输出

List after the use of Collection.sort() :
[Dear, Friends, Geeks For Geeks, Is, Superb]

时间复杂度: O(N log N)

辅助空间: O(1)

例2

// Java program to demonstrate working of Collections.sort()
// to descending order.
import java.util.*;
 
public class GFG {
    public static void main(String[] args)
    {
        // Create a list of strings
        ArrayList<String> al = new ArrayList<String>();
        al.add("Geeks For Geeks");
        al.add("Friends");
        al.add("Dear");
        al.add("Is");
        al.add("Superb");
 
        /* Collections.sort method is sorting the
        elements of ArrayList in ascending order. */
        Collections.sort(al, Collections.reverseOrder());
 
        // Let us print the sorted list
        System.out.println("List after the use of"
                           + " Collection.sort() :\n" + al);
    }
}

输出

List after the use of Collection.sort() :
[Superb, Is, Geeks For Geeks, Friends, Dear]

时间复杂度: O(N log N)

辅助空间: O(1)

方法4: 只对一个子数进行排序

// Java program to sort a subarray
// using Arrays.sort()
 
// Importing Arrays class from java.util package
import java.util.Arrays;
 
// Main class
public class GFG {
 
    // Main drive method
    public static void main(String[] args)
    {
        // Custom input array
        int[] arr = { 13, 7, 6, 45, 21, 9, 2, 100 };
 
        // Sort subarray from index 1 to 4, i.e.,
        // only sort subarray {7, 6, 45, 21} and
        // keep other elements as it is.
        Arrays.sort(arr, 1, 5);
 
        // Printing sorted array
        System.out.printf("Modified arr[] : %s",
                          Arrays.toString(arr));
    }
}

输出

Modified arr[] : [13, 6, 7, 21, 45, 9, 2, 100]

时间复杂度: O(N log N)

辅助空间: O(1)

注意

  • Java在sort()中使用哪种排序算法?

    以前,Java的Arrays.sort方法对基元数组使用Quicksort,对对象数组使用Merge排序。在Java的最新版本中,Arrays.sort方法和Collection.sort()使用Timsort。

  • 默认情况下是按升序排序的。

  • 如何对数组或列表进行降序排序?

    可以在Collections.reverseOrder()的帮助下完成。

  • 如何在Java中编写我自己的排序函数?

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程