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
热门文章
优秀文章