Java实现数组排序

排序是一种以一定顺序排列列表或数组元素的方法。该顺序可以是升序或降序。按数字和字母排序是一种广泛使用的排序方式。

在本节中,我们将学习如何使用sort() 方法而不使用sort() 方法对Java中的数组进行升序和降序排序。除此之外,我们还将学习如何在Java中对子数组进行排序。

1 使用sort()方法数组排序

在Java中,数组是java.util包中定义的类,该类提供sort() 方法以对数组进行升序排序。它使用Dual-Pivot Quicksort算法进行排序。它的复杂度为O(n log(n))。这是一个静态方法,它将数组解析为参数,并且不返回任何内容。我们可以使用类名直接调用它。它接受类型为int,float,double,long,char,byte的数组。

让我们使用Arrays类的sort() 方法对数组进行排序。

在下面的程序中,我们定义了一个整数类型的数组。之后,我们调用了Arrays类的sort() 方法,并将数组解析为sort。为了打印排序的数组,我们使用了for循环。

/**
 * 一点教程网: http://www.yiidian.com
 */
import java.util.Arrays;   
public class SortArrayExample1  
{   
public static void main(String[] args)   
{   
//defining an array of integer type   
int [] array = new int [] {90, 23, 5, 109, 12, 22, 67, 34};  
//invoking sort() method of the Arrays class  
Arrays.sort(array);   
System.out.println("Elements of array sorted in ascending order: ");  
//prints array using the for loop  
for (int i = 0; i < array.length; i++)   
{       
System.out.println(array[i]);   
}   
}  
}  

以上代码输出结果为:

Array elements in ascending order: 
5 
12 
22 
23 
34 
67 
90 
109

在上面的程序中,我们还可以使用Arrays类的toSting() 方法来打印数组,如以下语句所示。它返回指定数组的字符串表示形式。

System.out.printf(Arrays.toString(array)); 

2 使用for循环对数组排序

在下面的示例中,我们初始化了一个整数类型的数组,并以升序对数组进行排序。

/**
 * 一点教程网: http://www.yiidian.com
 */
public class SortArrayExample2  
{  
public static void main(String[] args)   
{  
//creating an instance of an array  
int[] arr = new int[] {78, 34, 1, 3, 90, 34, -1, -4, 6, 55, 20, -65};  
System.out.println("Array elements after sorting:");  
//sorting logic  
for (int i = 0; i < arr.length; i++)   
{  
for (int j = i + 1; j < arr.length; j++)   
{  
int tmp = 0;  
if (arr[i] > arr[j])   
{  
tmp = arr[i];  
arr[i] = arr[j];  
arr[j] = tmp;  
}  
}  
//prints the sorted element of the array  
System.out.println(arr[i]);  
}  
}  
}  

以上代码输出结果为:

Array elements after sorting:
-65
-4
-1
1
3
6
20
34
34
55
78
90

3 使用用户定义的方法对数组排序

在下面的示例中,我们定义了一个名为sortArray() 的方法,该方法包含以自然顺序对数组进行排序的逻辑。

/**
 * 一点教程网: http://www.yiidian.com
 */
public class SortArrayExample3  
{  
public static void main(String[] args)   
{          
int i;  
//initializing an array  
int array[] = {12, 45, 1, -1, 0, 4, 56, 23, 89, -21, 56, 27};  
System.out.print("Array elements before sorting: \n");  
for(i = 0; i < array.length; i++)  
System.out.println(array[i]);        
//invoking user defined method           
sortArray(array, array.length);  
System.out.print("Array elements after sorting: \n");      
//accessing elements of the sorted array     
for(i = 0; i <array.length; i++)  
{  
System.out.println(array[i]);  
}  
}  
//user defined method to sort an array in ascending order  
private static void sortArray(int array[], int n)   
{  
for (int i = 1; i < n; i++)  
{  
int j = i;  
int a = array[i];  
while ((j > 0) && (array[j-1] > a))   //returns true when both conditions are true  
{  
array[j] = array[j-1];  
j--;  
}  
array[j] = a;  
}  
}  
}  

以上代码输出结果为:

Array elements before sorting: 
12  
45  
1  
-1  
0  
4  
56  
23  
89  
-21  
56  
27  
Array elements after sorting: 
-21  
-1  
0  
1  
4  
12  
23  
27  
45  
56  
56  
89

4 如何对子数组进行排序

从一个数组派生的数组称为子数组。假设a []是一个包含元素[12、90、34、2、45、3、22、18、5、78]的数组,我们想要将数组元素从34排序为18。它将对子数组[ [34、2、45、3、22、18],并保持其他元素不变。

为了对子数组进行排序,Arrays类提供了名为sort() 的静态方法。它将指定范围的数组按升序排序。我们还可以对long,double,float,char,byte等类型的数组进行排序。

sort()方法的语法:

public static void sort(int[] a, int fromIndex, int toIndex)  
  • a:要排序的数组。
  • fromIndex:子数组第一个元素的索引。它参与排序。
  • toIndex:子数组的最后一个元素的索引。它不参与排序。

如果formIndex等于toIndex,则要排序的范围为空。如果fomIndex大于toIndex,则抛出IllegalArgumentException 。如果fromIndex <0或toIndex> a.length,则还会引发ArrayIndexOutOfBoundsException 。

让我们通过Java程序对子数组进行排序。

/**
 * 一点教程网: http://www.yiidian.com
 */
import java.util.Arrays;   
public class SortSubarrayExample   
{   
public static void main(String[] args)   
{   
//defining an array  
int[] a = {12, 90, 34, 2, 45, 3, 22, 18, 5, 78};  
// sorts subarray form index 2 to 7  
Arrays.sort(a, 2, 7);   
//prints array using the for loop  
for (int i = 0; i < a.length; i++)   
{       
System.out.println(a[i]);   
}   
}   
} 

 以上代码输出结果为:

Sorted Subarray: 
12
90
2
3
22
34
45
18
5
78

 

热门文章

优秀文章