import java.util.Scanner;
class ArraySort
{
public static void main(String[] args)
{
int[] arr={1,8,3,6,23,53,12,56};
Print(arr);//----------------------------------------------------------------打印数组
//sort(arr);//----------------------------------------------------------------冒泡排序数组
selectSort(arr);//----------------------------------------------------------------选择排序数组
Print(arr);//----------------------------------------------------------------排序后打印数组
System.out.print("以排序,请输入要查找的数:");
Scanner sc=new Scanner(System.in);
int shu=sc.nextInt();//----------------------------------------------------------------键盘录入要查找的数
//int index=search(arr,shu);
int index=compareSearch(arr,shu);//------------------------------------------------------折半查找整数
System.out.println("查找的数从0开始编号,角标是:"+index);//------------------------------输出查到的角标
}
public static void Print(int[] arr)//-----------------------------------------------------//数组打印
{
System.out.print("打印的数组是:");
for(int x=0;x<arr.length;x++)
System.out.print(arr[x]+" ");
System.out.println();
}
public static void sort(int[] arr) //------------------------------------------------------冒泡排序,
{
System.out.print("冒泡排序后");
for(int x=0;x<arr.length;x++)
for (int y=0;y<arr.length-x-1;y++ )
{
if(arr[y]>arr[y+1])
swap(arr,y,y+1); //--------------------------------------------------数组置换必须要使用swap(int arr[],int x,int y)
}
}
public static void selectSort(int[] arr)//-------------------------------------------------------选择排序
{
System.out.print("选择排序后");
for(int x=0;x<arr.length;x++)
for(int y=x+1;y<arr.length;y++)
if(arr[x]>arr[y])
swap(arr,x,y);
}
public static void swap(int arr[],int x,int y)//?????????????????--------------------置换位置,这里犯了错误了,我原来用的swap(int x,int y)
{
int temp=arr[x];
arr[x]=arr[y];
arr[y]=temp;
}
public static int search(int arr[],int x)//-------------------------------------------折半查找法
{
int max=arr.length-1;
int min=0;
int mid=(max+min)/2;//-------------------------------------------------------------取中间的数的角标
while(x!=arr[mid])//--------------------------------------------------------------如果查找的数不等于中间值,循环
{
if(x>arr[mid])
min=mid+1;//----------------------------------------------------------查找的数大于中间数,中间角标加1
else
max=mid-1;//----------------------------------------------------------查找的数大于中间数,中间角标减1
if(min>max)
return -1;//----------------------------------------------------------不存在,则返回-1
mid=(max+min)/2;//----------------------------------------------------------中间值等于最大加最小除以2
}
//else
return mid;//------------------------------------------------------------------返回角标
}
public static int compareSearch(int arr[],int x)//------------------------------------对比查找法
{
int a=0;
if(arr[0]<arr[arr.length-1])
w:for(int y=0;y<arr.length;y++)
{
if(x==arr[y])
{
//return y;
a=y;
break w;
}
else
{
a=-1;
break w;
}
}
return a;
}
}
|