Java基礎之數組的操作

一、數組的遍歷

數組的遍歷一般採用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、一般查找

前提:適用於有序或無序的數組
思路:將數組中的值依次與已知的參數進行比較 如果相等則返回該值的角標,如果沒有相等的數,說明參數不存在於數組中,返回-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、折半查找

前提:只適用於有序的數組
思路1:定義三個角標 最小角標min=0、最大角標max=str.length-1、中間角標mid=(min+max)/2;如果key值大於中間角標對應的值,那麼最小角標等於中間角標右移一位;如果key值小於中間角標對應的值,那麼最大角標等於中間角標左移一位;然後繼續折半mid=(min+max)/2;如果最小值大於最大值,說明key不存在於數組中,返回-1
	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;
	}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章