第九、Java數組的常見操作(冒泡、選擇排序、數組翻轉)


一、求最值

需求1:一個數組取出最大值

 /*定義一個獲取最大值的功能:
		1、確定結果 :返回值類型 int
		2、未知內容:要獲取哪個數組的最大值沒有確定,則是數組沒有確定
	
	思路:
		1、定義一個變量,記錄住數組的比較大的元素。
		2、遍歷整個數組,讓數組的每一個元素都和該變量進行對比即可。
		3、當變量遇到比它大的元素,則讓該變量記錄該元素的值,當循環結束時,最大值產生了
	*/
	
	public static int getMax(int[] arr)
	{
		//定義變量記錄較大的值,初始化爲數組中的任意一個元素。
		int max = arr[0];

		for(int x=1; x<arr.length; x++)
		{
			if(arr[x]>max){ //如果發現有元素比max大,那麼max變量就記錄該元素。
				max = arr[x];
                         }
		}
		return max;

	}


二、選擇排序

需求2:定義一個函數接收一個int類型的數組對象, 把數組中的最大值放在數組中的第一位。

選擇排序(直接排序):使用一個元素與其他 的元素挨個比較一次,符合條件交換位置。

        public static void main(String[] args) 
         	{
	 	  int[] arr = {12,5,17,8,9};  //對於5元素的數組,只需要找出4個最大值就可以排序了。
		  selectSort(arr);
	        }

	public static void selectSort(int[] arr){
		
		//把最大值放在首位置。
		for(int j = 0; j<arr.length-1; j++){  //  控制的是輪數。
			for(int i = j+1 ; i<arr.length ; i++){ // 找出最大值
				if(arr[i]>arr[j]){
					//交換位置
					int temp = arr[i];
					arr[i] = arr[j];
					arr[j] = temp;
				}
			}
		}
		

              /*
		//把老二放在第二個位置
		for(int i = 2  ; i< arr.length ; i++){
			if(arr[i]>arr[1]){
				int temp = arr[i];
				arr[i] = arr[1];
				arr[1] = temp;
			}
		}
		

		//把老三放在第三個位置
		for(int i = 3  ; i< arr.length ; i++){
			if(arr[i]>arr[2]){
				int temp = arr[i];
				arr[i] = arr[2];
				arr[2] = temp;
			}
		}

		//把老四放在第四個位置
		for(int i = 4  ; i< arr.length ; i++){
			if(arr[i]>arr[3]){
				int temp = arr[i];
				arr[i] = arr[3];
				arr[3] = temp;
			}
		}

               */

		
		//遍歷數組,查看效果
		System.out.print("目前的元素:");
		for (int i = 0 ; i<arr.length  ;i++){
			System.out.print(arr[i]+",");
		}

	}



三、冒泡排序

需求3: 定義一個函數接收一個int類型的數組對象, 把數組中的最大值放在數組中的最後一位。
冒泡排序:冒泡排序的思想就是使用相鄰的兩個 元素挨個比較一次,符合條件交換位置。

原理:內循環結束一次,最值出現在尾角標位置。


public static void main(String[] args) 
	{
		int[] arr = {12,8,17,5,9}; // 最大的索引值: 4   容量:5 
 		bubbleSort(arr);
	}


	public static void bubbleSort(int[] arr){
		// 把最大值放在最後一個位置
		for(int j = 0 ; j<arr.length-1 ; j++){ //控制輪數
			for(int i = 0 ; i<arr.length-1-j  ; i++){  // 找出一個最大值  
				//相鄰的元素比較
				if(arr[i]>arr[i+1]){
					int temp  = arr[i];
					arr[i] = arr[i+1];
					arr[i+1] = temp;
				}
			}
		}

/*
	
		//把老二放在倒數第二個位置上。
		for(int i = 0 ;  i <arr.length-1-1 ; i++){
			if(arr[i]>arr[i+1]){
				int temp = arr[i];
				arr[i] = arr[i+1];
				arr[i+1] = temp;
			}	
		}

	
		//把老三放在倒數第三個位置上。
		for(int i = 0 ;  i <arr.length-1-2 ; i++){
			if(arr[i]>arr[i+1]){
				int temp = arr[i];
				arr[i] = arr[i+1];
				arr[i+1] = temp;
			}	
		}

		//把老四放在倒數第四個位置上。
		for(int i = 0 ;  i <arr.length-1-3 ; i++){
			if(arr[i]>arr[i+1]){
				int temp = arr[i];
				arr[i] = arr[i+1];
				arr[i+1] = temp;
			}	
		}

*/


		//遍歷數組,查看效果
		System.out.print("目前的元素:");
		for (int i = 0 ; i<arr.length  ;i++){
			System.out.print(arr[i]+",");
		}
		
	}



四、二分法

需求:定義一個函數接收一個數組對象和一個要查找的目標元素,函數要返回該目標元素在
數組中的索引值,如果目標元素不存在數組中,那麼返回-1表示。

折半查找法(二分法): 使用前提必需是有序的數組。


public static void main(String[] args) 
	{
		int[] arr = {12,16,19,23,54};
		//int index = searchEle(arr,23);
		int index = halfSearch(arr,116);
		System.out.println("元素所在的索引值是:"+ index);
	}
	
		
	public static int halfSearch(int[] arr, int target){
		//定義三個變量分別記錄最大、最小、中間的查找範圍索引值
		int max = arr.length-1;
		int min = 0;
		int mid = (max+min)/2;
		while(true){
			if(target>arr[mid]){
				min = mid+1;
			}else if(target<arr[mid]){
				max = mid -1;
			}else{
				//找到了元素
				return mid;
			}

			//沒有找到的情況
			if (max<min){
				return -1;
			}

			//重新計算中間索引值
			mid = (min+max)/2;
		}
	
	}



	
	public static int searchEle(int[] arr, int target){
		for(int i = 0 ; i<arr.length ; i++){
			if(arr[i]==target){
				return i;
			}
		}
		return -1;
	}



五、數組翻轉

反轉其實就是頭角標和尾角標的元素進行位置的置換,然後在讓頭角標自增。尾角標自減。當頭角標<尾角標時,可以進行置換的動作

需求: 定義 一個函數接收一個char類型的數組對象,然後翻轉數組中的元素。

char[] arr = {'a','b','c','d','e'};

public static void main(String[] args) 
	{
		//System.out.println("Hello World!");
		char[] arr = {'a','b','c','d','e'};
		reverse(arr);

	}

	public static void reverse(char[] arr){
		for(int startIndex = 0 ,endIndex = arr.length-1 ;   startIndex<endIndex ; startIndex++,endIndex--){
			char temp = arr[startIndex];
			arr[startIndex] = arr[endIndex];
			arr[endIndex] = temp;
		}

		//遍歷數組,查看效果
		System.out.print("目前的元素:");
		for (int i = 0 ; i<arr.length  ;i++){
			System.out.print(arr[i]+",");
		}

	}



六、Arrays的使用

遍歷: toString()    將數組的元素以字符串的形式返回

排序: sort()        將數組按照升序排列

查找: binarySearch()在指定數組中查找指定元素,返回元素的索引,如果沒有找到返回(-插入點-1) 注意:使用查找的功能的時候,數組一定要先排序。




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