在Java中數(shù)組排序是一個非常基礎(chǔ)的問題,也是面試中經(jīng)常問及的問題。本篇文章將向各位小伙伴介紹五種常見的排序方法。
Arrays.sort()
Arrays.sort()排序方法是在Java當(dāng)中最簡單,也是最常用的排序方法
int[] arr1 = {21,16,34,5,20};
Arrays.sort(arr1);
for(int i=0;i<arr1.length;i++){
System.out.print(arr1[i]+" ");
}
輸出結(jié)果
5 16 20 21 34
通過輸出結(jié)果可以知道,?Arrays.sort()
?排序方法默認(rèn)將數(shù)組進(jìn)行升序排序。
冒泡排序
顧名思義,就像泡泡一樣,比較輕地就浮在上面,較重的那個就會往下沉。那么如何知道哪個輕,哪個重?也就是比較數(shù)組里的數(shù)字大小。就要比較相鄰的兩個數(shù)字,如果前者比后者大,那么兩者交換位置,較大的那位繼續(xù)跟下一位比較;如果后者大,那么位置不會更換,大的那一位繼續(xù)和下一位進(jìn)行比較。
package simple_sort;
public class Dome_sort {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] numbers = new int[]{1,9,5,6,7};
int i,j;
for(i =0;i<numbers.length;i++){
for(j=0;j<numbers.length-1;j++)
{
if(numbers[j]>numbers[j+1])
{
int temp= numbers[j];
numbers[j]=numbers[j+1];
numbers[j+1]=temp;
}
}
}
System.out.println("排序后的結(jié)果");
for(i=0;i<numbers.length;i++)
System.out.print(numbers[i]+" ");
}
}
輸出結(jié)果
1 5 6 7 9
選擇排序
選擇排序原理就是,遍歷元素,找到一個最小或是最大值,然后把這個值放在首位,在剩下的所有元素中繼續(xù)挑選最小和最大的值。如此往復(fù),直到排序完成。
public class SortDemo {
public static void main(String[] args) {
int[] arr = new int[] { 5, 3, 6, 2, 10, 2, 1 };
selectSort(arr);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
public static void selectSort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
int minIndex = i; // 用來記錄最小值的索引位置,默認(rèn)值為i
for (int j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j; // 遍歷 i+1~length 的值,找到其中最小值的位置
}
}
// 交換當(dāng)前索引 i 和最小值索引 minIndex 兩處的值
if (i != minIndex) {
int temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
// 執(zhí)行完一次循環(huán),當(dāng)前索引 i 處的值為最小值,直到循環(huán)結(jié)束即可完成排序
}
}
}
輸出結(jié)果
1 2 2 3 5 6 10
反轉(zhuǎn)排序
反轉(zhuǎn)排序就是把原數(shù)組的順序反過來輸出。它的思想也很簡單,就是把數(shù)組的第一位和最后一位進(jìn)行交換;第二位和倒數(shù)第二位進(jìn)行交換...以此類推,直到反轉(zhuǎn)結(jié)束。
public class ReverseSort {
public static void main(String[] args) {
int arr[]= {10,20,30,40,50,60};
ReverseSort sort=new ReverseSort();
sort.sort(arr);
}
public void sort(int[]array) {
int temp;
int len=array.length;
for (int i = 0; i < len/2; i++) {
temp=array[i];
array[i]=array[len-1-i];
array[len-1-i]=temp;
}
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
}
}
結(jié)果輸出
60 50 40 30 20 10
直接插入排序
直接插入排序原理就是將定義的數(shù)組,從第二個到最后一個元素都依次作為插入數(shù)據(jù)。分別和它們各自前面的值進(jìn)行比較,如果比較比前者小,則直接插入在前者的前面。直到比較到比插入數(shù)據(jù)的值要小,或者已經(jīng)到了第一個位置,則停止比較插入。
public class InsertAlgorithm {
public static void insertAlgorithm(int r[]){
for(int i=1;i<r.length;i++){//從數(shù)組的第二個元素到數(shù)組的最后一個元素依次取出來插入到它前面的數(shù)的合適位置中
int insertNumber=r[i];//將要插入的數(shù)據(jù)賦值給變量insertNumber
int j=i-1;
while(j>=0&&insertNumber<r[j]){//要插入的元素小于第j個元素
r[j+1]=r[j];//第j個元素向后移動
--j;//比較插入數(shù)據(jù)和r[j]的大小,直到j(luò)為0
}
r[j+1]=insertNumber;//退出while循環(huán),即插入的數(shù)據(jù)已經(jīng)不小于r[j]了,這時插入數(shù)據(jù)插入到r[j]后面
}
for(int a:r){
System.out.print(a+" ");
}
}
public static void main(String args[]){
int a[]={52,39,67,95,70,8,25};
insertAlgorithm(a);
}
}
輸出結(jié)果
8 25 39 52 67 70 95
總結(jié)
以上就是關(guān)于Java中數(shù)組排序的五種常見排序方法的全部內(nèi)容,如果想要了解更多關(guān)于Java數(shù)組排序的方法,請多多關(guān)注并支持W3Cschool!