继续还是数组的学习
冒泡法排序
public static void main(String[] args)
{
int[] arr={56,9,8,1,0,65};
bubbleSort(arr);
printArray(arr);
}
/*
冒泡排序
内循环参与比较的数,在逐级减少,如length-1,length-2
所以 length-x
length-x-1 避免角标越界
*/
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++ )
{
if(arr[y]>arr[y+1])//从小到大,反过来就是从大到小
{
int temp=arr[y];
arr[y]=arr[y+1];
arr[y+1]=temp;
}
}
}
}
//打印数组
public static void printArray(int[] arr)
{
for (int x=0;x<arr.length ;x++ )
{
if(x!=arr.length-1)
{
System.out.print(arr[x]+",");
}
else
{
System.out.println(arr[x]);
}
}
}
数组练习 折半查找
/*
数组的查找操作
*/
class Arraytest4
{
public static void main(String[] args)
{
//int[] arr={5,6,9,88,11};
//int index=getIndex(arr,6);
int[] arr={1,5,6,7,9,11,15};
int index=halfSearch(arr,900);
System.out.println("你要寻找的角标在:"+index);
}
//查找一个数插入位置 要保证数组有序
public static int getIndex_2(int[] arr,int key)
{
int min,max,mid;
min=0;
max=arr.length-1;
while(min<max)
{
mid=(max+min)>>1; //等于mid=(max+min)/2;
if(key>arr[mid])
{
mid=min+1;
}
else if (key<add[mid])
{
mid=max-1;
}
else
{
return mid;
}
}
return min;
}
/*
折半的第二种方式
*/
public static int halfSearch_1(int[] arr,int key)
{
int min,max,mid;
min=0;
max=arr.length-1;
while(min<max)
{
mid=(max+min)>>1; //等于mid=(max+min)/2;
if(key>arr[mid])
{
mid=min+1;
}
else if (key<add[mid])
{
mid=max-1;
}
else
{
return mid;
}
}
return -1;
}
/*
折半查找,可以提高效率,但是必须保证数组是有序的数组
*/
public static int halfSearch(int[] arr,int key)
{
int min,max,mid;
min=0;
max=arr.length-1;
mid=(min+max)/2;
while(arr[mid]!=key)
{
if (key>arr[mid])
{
min=mid+1;
}
else if (key<arr[mid])
{
max=mid-1;
}
if(min>max)//找不到
{
return -1;
}
mid=(min+max)/2;
}
return mid;
}
//定义功能,获取key第一次出现在数组中的位置
public static int getIndex(int[] arr,int key)
{
for (int x=0;x<arr.length;x++ )
{
if(arr[x]==key)
{
return x;
}
}
return -1;//没有找到,可以用负数,因为数组角标没有负数的
}
}