/*
需求:定义一个数组{-3,5,-2,-6,7,-1,4,9,-8}
1.对数组进行遍历打印
2.获取数组的最大和最小值
3.用选择排序和冒泡排序对数组排序
4.对给定的数组进行反转
5.数组元素的查找
*/
class ArrayDemo
{
public static void main(String[] args)
{
int[] arr={-3,-8,5,-2,9,-6,7,-1,4};
printArray(arr);
int max=getMax(arr);
System.out.println("数组最大值:"+max);
int min=getMin(arr);
System.out.println("数组最小值:"+min);
//selectSort(arr);
bubbleSort(arr);
printArray(arr);
}
//定义一个打印数组的函数printArray
public static void printArray(int[] arr)
{
System.out.print("[");
for(int x=0;x<arr.length;x++)
{
if(x!=arr.length-1)//最大角标之前的元素打印时同时打印个,号与后面的元素隔开
{
System.out.print(arr[x]+",");
}
else
{
System.out.println(arr[x]+"]");
}
}
}
//定义一个找出数组最大值函数getMax
public static int getMax(int[] arr)
{
int max = arr[0];//定义一个初始化值用于记录数组中的最值
for(int x=0;x<arr.length;x++)
{
if(arr[x]>max)
{
max=arr[x];
}
}
return max;
}
//定义一个找出数组最小值函数getMin
public static int getMin(int[] arr)
{
int min = arr[0];//定义一个初始化值用于记录数组中的最值
for(int x=0;x<arr.length;x++)
{
if(arr[x]<min)
{
min=arr[x];
}
}
return min;
}
//定义一个对数组进行排序的函数
//1.选择排序法:将头角标位元素与后面的元素逐一比较,循环一次后最小值到了头角标位
public static void selectSort(int[] arr)
{
for(int x=0;x<arr.length-1;x++)
{
for(int y=x+1;y<arr.length;y++)//将头角标位元素与后面的元素逐一比较
{
if(arr[x]>arr[y])//如果arr[x]>arr[x+1]就进行换位
{
int temp=arr[x];
arr[x]=arr[y];
arr[y]=temp;
}
}
}
}
//2.冒泡排序法:将相邻的两元素都进行比较,循环一次后,最大值到了最后角标位
public static void bubbleSort(int[] arr)
{
for(int x=0;x<arr.length-1;x++)
{
for(int y=0;y<arr.length-x-1;y++)//-x:让每一次比较的元素减少,-1:避免角标越界。
{
if(arr[y]>arr[y+1])//将相邻的两元素进行比较
{
int temp=arr[y];
arr[y]=arr[y+1];
arr[y+1]=temp;
}
}
}
}
//对给定的数组进行反转
public static void reverseArray(int[] arr)
{
for(int start=0,end=arr.length-1; start<end ; start++,end--)
{
/*
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
*/
swap(arr,start,end);
}
}
public static void swap(int[] arr,int a,int b)
{
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
//数组元素的查找:
//折半查找:提高效率,但是必须要保证该数组是有序的数组。
public static int halfSearch(int[] arr,int key)
{
int min = 0,max = arr.length-1,mid;
while(min<=max)
{
mid = (max+min)>>1;
if(key>arr[mid])
min = mid + 1;
else if(key<arr[mid])
max = mid - 1;
else
return mid;
}
return -1;
}
//折半查找扩展:将一个数插入某一有序数组,插入的角标位置
public static int getIndex(int[] arr,int key)
{
int min = 0,max = arr.length-1,mid;
while(min<=max)
{
mid = (max+min)>>1;
if(key>arr[mid])
min = mid + 1;
else if(key<arr[mid])
max = mid - 1;
else
return mid;
}
return min;
}
}
|
|