一、數組的遍歷
數組的遍歷一般採用for循環的方式對數組依次輸出,在for循環的過程中可對輸出格式進行裝飾。首先我們定義一個數組:
int arr []={2,6,1,7,9,14};
下面我們寫一個方法printArr(),用於遍歷數組
public static void printArr(int arr []){
System.out.print("{");
for(int i=0;i<arr.length;i++){
if(i!=arr.length-1){
System.out.print(arr[i]+",");
}else {
System.out.println(arr[i]+"}");
}
}
}
輸出結果:{2,6,1,7,9,14}二、數組的求和
思路:首先定義一個初始值爲0的參數sum用於存儲數組的和,在遍歷過程中將數組的每一個值累加給sum:
public static void sumArr(int arr []){
int sum=0;
for (int i=0;i<arr.length;i++){
sum+=arr[i];
}
System.out.println(sum);
}
三、求數組的最值
思路:如果求數組的最大值,首先定義一個參數max 並把數組0標誌位上的值賦給max,在遍歷數組的過程中如果數組中某一標誌位上的值大於max,那麼把這個標誌位上的值賦給max。如果求數組的最小值 在遍歷數組的過程中如果數組中某一標誌位上的值小於定義的參數,那麼把這個標誌位上的值賦給該參數即可。下面以求最大值爲例
public static void maxArr(int arr []){
int max=arr[0];
for (int i=1;i<arr.length;i++){
if(max<arr[i]){
max=arr[i];
}
}
System.out.println(max);
}
四、數組的排序
1、選擇排序
思路:首先拿數組的0角標位置上的值依次與其他位置上的值進行比較,如果滿足條件,則位置互換,然後拿1角標位置上的值依次與後面的值比較,滿足條件,位置互換,以此類推 直至數組的最後一個值,如下圖:
代碼如下:
public static void selectSort(int arr []){
for(int i=0;i<arr.length;i++){
for(int j=i+1;j<arr.length;j++){
if(arr[i]>arr[j]){
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
}
2、冒泡排序
代碼如下:
public static void maoPaoSort(int arr[]){
for(int i=0;i<arr.length-1;i++){
for(int j=0;j<arr.length-i-1;j++){
if(arr[j]>arr[j+1]){
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
五、數組的查找
1、一般查找
public static int getIndex(int arr[], int key) {
for (int x = 0; x < arr.length; x++) {
if (arr[x] == key) {
return x;
}
}
return -1;
}
2、折半查找
public static int getHarfIndex(int str[],int key){
int min=0;//定義最小角標
int max=str.length-1;//定義最大角標
int mid=(min+max)/2;//定義中間角標
//因爲不知道循環的次數 使用while循環,如果中間值與所比較的值key不相等,循環繼續
while(str[mid]!=key){
//如果key值大於中間角標對應的值,那麼最小角標等於中間角標右移一位
if(key>str[mid]){
min=mid+1;
//如果key值小於中間角標對應的值,那麼最大角標等於中間角標左移一位
}else if (key<str[mid]) {
max=mid-1;
}
//如果最小值大於最大值,說明key不存在於數組中,返回-1
if(min>max){
return -1;
}
//繼續折半
mid=(min+max)/2;
}
return mid;
}
思路2:同樣定義三個角標min、max、mid,如果最小角標小於最大角標,折半循環繼續,否則返回-1 public static int getHarfIndex_2(int str[],int key){
int min=0,max=str.length-1,mid;
while(min<max){
mid=(min+max)/2;
if(key>str[mid]){
min=mid+1;
}else if (key<str[mid]) {
max=mid-1;
}else{
return mid;
}
}
return -1;
}