java零基础学习第6天

今天我们主要学习可变参数,数组中的两种排序算法,冒泡排序和选择排序。二分查找算法和Arrays工具类。

一.可变参数

可变参数:参数的个数不确定,可以是0个可以是多个,参数的数据类型必须相同。
可变参数必须要写在参数列表的最后
… ,数据类型 … 参数名–>可变参数
操作可变参数,要通过使用数组的方式,编译器会隐式的在内部为我们构建一个数组,存储可变参数的值。

二.冒泡排序

每次从将数组中相邻的两个数比较,如果前面的数比后面的数大,这将这两个数交换,这样,一轮过后,数组下标最大的那个数为数组中的最大值。第二轮,最后一个数不变,将前面的数再做两两比较,找出其中的最大值,放在倒数第二的位置,以此类推。。。
具体代码如下:

//冒泡排序
public static int[] bubble(int[] arr){
	//外层循环控制比较轮数  1~arr.length-1 比如5个数,比较4轮
	for(int i=1;i<=arr.length-1;i++){
		//内层循环的变量控制i 没两个数比较的第一个数的索引j 和 j+1  j的范围:0  ~arr.length-i-1
		for(int j=0;j<arr.length-i;j++){
			if(arr[j]<arr[j+1]){
				int temp=arr[j+1];
				arr[j+1]=arr[j];
				arr[j]=temp;
			}
		}	
	}
	return arr;
}

三.选择排序

选择排序的思想是每次从数组中选出最小的数,放在已排序好的数组的最前面。比方说int[] arr,数组长度为n,第一次arr[0]到arr[n-1]中选出最小的数与arr[0]交换,第二次从arr[1]~arr[n-1]中选出最小的数与arr[1]交换,以此类推:

public static int[] choice(int[] arr){
		//外层循环i控制轮数,主场数的索引
		int max=0;  //记录每一轮中最大数据的索引
		for(int i=0;i<arr.length-1;i++){
			max=i;
			//与主场数比较的数的范围 m
			for(int m=i+1;m<=arr.length-1;m++){
				if(arr[max]>arr[m]){
					max=m;
				}
			}
			//max 最大数的位置
			if(max!=i){
				int temp=arr[i];
				arr[i]=arr[max];
				arr[max]=temp;
			}
		}
		return arr;
	}

四.二分查找

二分查找又叫折半查找。是在有序数组中查找给定值得有效的方法。每次将数组中间的那个值与给定值进行比较,如果相等,返回下标,如果比给定值大,则跳到左半部分数组继续查找,否则跳到右半部分数组查找。具体代码如下:

//二分法查找:
	//数组已经升序排序
	//查找数组中指定的数据,找到返回它的索引,没有找到返回-1
	public static int find(int[] arr,int i){
		int min=0;
		int max=arr.length-1;
		int mid=(min+max)/2;//数组中间位置下标
		
		while(i!=arr[mid]){
			if(i>arr[mid]){//如果关键值比数组中间值大,则到数组右半部分查找
				min=mid+1;
			}else if(i<arr[mid]){//如果关键值比数组中间值小,则到数组左半部分查找
				max=mid-1;
			}
			if(max<min){
				return -1;//max<min;表示查找失败,返回-1
			}
			mid=(min+max)/2;//更新数组中间值
		}
		return mid;
	}

五.Arrays工具类

1)static boolean equals(int[] a, int[] a2) 如果两个指定的 int 型数组彼此相等,则返回 true。
2)static String toString(int[] a) 返回指定数组内容的字符串表示形式。
3)static void sort(int[] a) 对指定的 int 型数组按数字升序进行排序。
4)static void sort(int[] a, int fromIndex, int toIndex) 对指定 int 型数组的指定范围按数字升序进行排序。
5)static void fill(int[] a, int val) 将指定的 int 值分配给指定 int 型数组的每个元素。
6)static int binarySearch(int[] a, int key) 使用二分搜索法来搜索指定的 int 型数组,以获得指定的值。
7)static int[] copyOf(int[] original, int newLength)
8)static int[] copyOfRange(int[] original, int from, int to) 将指定数组的指定范围复制到一个新数组。
9)static boolean deepEquals(Object[] a1, Object[] a2) 如果两个指定数组彼此是深层相等 的,则返回 true。
10)static String deepToString(Object[] a) 返回指定数组“深层内容”的字符串表示形式

猜你喜欢

转载自blog.csdn.net/qq_35901141/article/details/89645995