一、數組的定義
在java中數組被看成是一個對象.在定義數組時,有兩種定義方法:int[] a 和int a[];
第二種是C/C++對數組定義方式,對于JAVA建議采用第一種定義方式。
總的原則:任何對象在被調用之前必須先被初始化!
1、一維數組的定義
定義包含三個元素的一維數組
方法1:先new對象,然後再初始化每個元素。int[] a = new int[3];
用new int[3]這種方式建立對象,對象已經被初始化并賦初值為0。
方法2:直接賦初值來建立對象。int[] b = {1,2,3};
方法3:new完對象直接初始化。int[] c = new int[]{1,2,3};
如果指定了數組初始化操作,則不能定義維表達式。
注意:如果用new定義數組時,必須指定其次元,這樣定義是錯誤的: int[] d = new int[];
如果無法确定其元素個數,可以這樣定義:int[] e = {};
2、二維數組的定義。基本與一維數組類似
定義一個3行5列的二維數組
方法1:先new對象,然後再初始化每個元素。int[][] a = new int[3][5];
方法:直接賦初值來建立對象。int[][] b = {{1,1,1,1,1}, {2,2,2,2,2}, {3,3,3,3,3} };
方法3,new完對象直接初始化。int[][] a = new int[][] {{1,1,1,1,1}, {2,2,2,2,2}, {3,3,3,3,3} };
注意:定義二維數組必須指定其行數,列數可以指定,可以不指定。
這樣定義是正确的:int[][] d = new int[3][];
這樣定義是錯誤的:int[][] d = new int[][4]; int[][] d = new int[][];
也可以定義不規則數組:
arr = new int[2][];
arr[0] = new int[3];
arr[1] = new int[5];
3、數組的長度
length是數組的一個屬性(不是方法!),對于一維數組int[] b = {1,2,3}; b.length的值是3,
4、數組的初始值
二、數組的排序方法
java中常見的四種數組排序方法:
1、調用方法排序法:
直接調用Array.sort(int[] arr),對數組進行排序
2、冒泡法:
基本思想:依次比較相鄰的兩個數,将小數放在前面,大數放在後面(或者大在前,小在後)
優點:穩定
缺點:比較的數多,速度慢,每次隻能移動相鄰兩個資料,時間長,效率低
示意圖:
3、簡單選擇排序法:
基本思想:每一趟從待排序的資料元素中選出最小(或最大)的一個元素,
順序放在已排好序的數列的最後(最前),直到全部待排序的資料元素排完。
優點:移動資料的次數已知(n-1次)。
缺點:不是穩定的排序方法,比較次數多。
示意圖:
4、直接插入排序法:
基本思想:将一個資料插入到已經排好序的有序資料中,進而得到一個新的、個數加一的有序資料
優點:是穩定的排序方法,速度較快。
缺點:比較次數不一定,比較次數越少,插入點後的資料移動越多,特别是當資料總量龐大的時候,
可連結清單可以解決這個問題。此算法适用于少量資料的排序。
示意圖:
代碼:
/*
java數組中最常見的幾種排序方式:
1、調用方法排序法:
直接調用Array.sort(int[] arr),對數組進行排序
2、冒泡法:
基本思想:依次比較相鄰的兩個數,将小數放在前面,大數放在後面(或者大在前,小在後)
優點:穩定
缺點:比較的數多,速度慢,每次隻能移動相鄰兩個資料,時間長,效率低
3、簡單選擇排序法:
基本思想:每一趟從待排序的資料元素中選出最小(或最大)的一個元素,
順序放在已排好序的數列的最後(最前),直到全部待排序的資料元素排完。
優點:移動資料的次數已知(n-1次)。
缺點:不是穩定的排序方法,比較次數多。
4、直接插入排序法:
基本思想:将一個資料插入到已經排好序的有序資料中,進而得到一個新的、個數加一的有序資料
優點:是穩定的排序方法,速度較快。
缺點:比較次數不一定,比較次數越少,插入點後的資料移動越多,特别是當資料總量龐大的時候,
可連結清單可以解決這個問題。此算法适用于少量資料的排序。
*/
import java.util.Arrays;
public class sortDemo{
public static void main(String[] args){
//列印排序前的數組
sopArray(creatArray());
//列印排序後的數組
//fastSort(creatArray());//快速排序
//bubbleSort(creatArray());//冒泡排序
//selectSort(creatArray());//選擇排序法
insertSort(creatArray());//插入排序法
}
//建立一個數組
public static int[] creatArray(){
int[] arr = new int[]{49,38,65,97,76,13,27,17,18,23,25,53,51};
return arr;
}
//快速排序法
public static void fastSort(int[] arr){
Arrays.sort(arr); //進行排序
sopArray(arr);//列印數組
}
//冒泡排序法
public static void bubbleSort(int[] arr){
int temp = 0;
for(int i = 0; i < arr.length-1; i++){//周遊arr.length-1次
for(int j = 0; j < arr.length-1-i; j++){
if(arr[j] > arr[j + 1]){//比較相鄰兩個數,并做調整
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
sopArray(arr);//列印數組
}
//選擇排序法
public static void selectSort(int[] arr){
for(int i = 0; i < arr.length-1; i++){//周遊arr.length-1次
int min = i;
for(int j = i+1; j < arr.length; j++){
if(arr[min] > arr[j]) min = j;//比較兩數的值,并調整下标
}
if(min != i){//判斷是否需要調整元素
int temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}
sopArray(arr);//列印數組
}
//插入排序法
public static void insertSort(int[] arr){
for(int i =1; i < arr.length; i++){
for(int j =i; j > 0; j--){
if(arr[j] < arr[j-1]){
int temp = arr[j-1];
arr[j-1] = arr[j];
arr[j] = temp;
}
else break;
}
}
sopArray(arr);
}
//列印數組
public static void sopArray(int[] arr){
sop("[");
for(int i = 0; i < arr.length; i++){
if(i == arr.length - 1)
sop(arr[i] + "]");
else
sop(arr[i] + ",");
}
sop("\n");
}
//列印字元串
public static void sop(String s){
System.out.print(s);
}
}