------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一、数组的遍历
数组的遍历 ,这里需要注意的是,不能直接是打印数组名称,这样只是打印了数组在内存中的地址。而不是数组中的元素。
我们可以用arr[0]这样的形式来单独打印数组中的摸个元素。(数组中第一个元素的索引为0,然后以此类推)。
想要打印数组中所有的元素,需要用循环遍历来实现。
二、数组中元素的排序。
数组的排序方法有很多种,比较常见的有,选择排序,和冒泡排序等,这两种方法的排序简单易懂,但是数组中元素较多时,效率较慢,其中效率最高的排序叫希尔排序
选择排序
冒泡排序
三、折半查找
/*
需求:将一个已知元素插入到一个有序数组中,要求不改变数组顺序,打印元素应该插入数组位置的角标。
思路:1、可以利用折半查找的方式,先定义两个变量,一个初始化0角标,作为最小值,一个初始化为最后一个角标,作为最大值,
再定义一个变量,存储最小值与最大值的一半,也就是中间位置,然后将已知元素与中间值位元素进行比较。
2、如果比中间值元素大,则将最小值变为中间值加1,继续取最小值与最大值的中间值元素与已经元素进行比较,以此反复
3、如果比中间值元素小,则将最大值变为中间值减1,继续取最小值与最大值的中间值元素与已经元素进行比较,以此反复
*/
class HalfSearch
{
public static void main(String[] args)
{
int[] arr={2,6,9,11,15,19,22,30};
//打印数组
printArray(arr);
int key=20;
//用第一种折半方式输出插入的角标值
System.out.println("当key=20在数组arr中插入的角标位置是:"+halfSearch1(arr,key));
key=1;
//用第二种折半方式输出插入的角标值
System.out.println("当key=1在数组arr中插入的角标位置是:"+halfSearch2(arr,key));
}
//折半查找<一>
public static int halfSearch1(int[] arr,int key)
{
int min=0,max=arr.length-1,mid=(max+min)/2;
while(key!=arr[mid])
{
if(min>max)
return min;
else if(key>arr[mid])
min=mid+1;
else
max=mid-1;
mid=(max+min)>>>1;//折半操作
}
return mid;
}
//折半查找<二>
public static int halfSearch2(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;
}
//遍历数组
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.print(arr[x]+"]");
}
//换行
System.out.println();
}
}