package arry;
//需求:给定一个数组,对数组进行排序,并且查找数组中的某一个元素
/*
* 思路:1,对数组进行排序,选用冒泡排序方法;
* 2.定义一个打印的方法;
* 3.查找有序数组中的某一个元素,可以使用二分查找方法;
* */
public class ArryDemo11 {
public static void main(String args[])
{
int arr[] ={28,38,98,17,39,87,88};
printInfor(arr); //传递一个参数到打印方法中
bubbleSort(arr);
printInfor(arr);
int ind =halfSearch(arr,98);
System.out.println("角标:"+ind);
}
//冒泡排序:
/*思路:实质是两个相邻元素之间互相比较,若符合要求,那么就互相交换位置
* 1.首先从数组中第一个元素到倒数第二个元素,依次与其右边的元素进行比较,若左边的元素大于右边的元素,
* 那么就互相交换位置;
* 2.经过第一轮比较后,元素的最值就会到最右边的节点上去,
* 3.再进行第二轮比较,在从第一个元素到倒数第三个元素进行比较,若左边的元素大于右边的元素,那么就
* 进行换位;
* 4.以此类推,直到第一个元素与第二个元素比较完;
* */
public static void bubbleSort(int arr[])
{
for (int x=0;x<arr.length-1;x++) //-1是因为最后一个数没有右边
{
for(int y=0;y<arr.length-x-1;y++) //-x是因为每经过一轮就就有x个元素位置已经排好,-1是为了防止越界
{
if(arr[y]>arr[y+1])
{
int temp =arr[y];
arr[y]=arr[y+1];
arr[y+1]=temp;
}
}
}
}
//定义一个打印数组的方法
/*两个明确:1.返回值类型为空;
* 2.在运算过程中有未知内容参与运算:传递一个int类型的数组。
* */
public static void printInfor(int arr[])
{
System.out.print("{");
for(int x=0;x<arr.length;x++)
{
if(x!=arr.length-1)
{
System.out.print(arr[x]+"\t");
}
else
{
System.out.println(arr[x]+"}");
}
}
}
//二分查找法查找数组中的某一个元素
/*
* 注:二分查找法是对有序数组进行查找
* 思路:1.定义3个变量,min,mid,max,其中min=0,mmax=arr.length-1,mid=(min+max)/2;
* 2.首先要将待查找的数与mid角标所对应的元素进行比较,若两个数相等,那么就返回该角标,并且程序终止执行;
* 3.若不相等,如果待查找的元素大于mid角标所对应的元素,此时待查找的元素就在mid和max角标
* 所对应的元素之间,那么min=mid+1,mid=(min+max)/2;然后在执行第二个步骤;
* 4.若待查找的元素小于mid角标所对应的元素,那么待查找的元素就在mid和min角标所对应的元素之间,
* 然后在执行第二步流程;
* 5.若待查找的元素不在数组中,那么就返回-1,此时会出现min>max的情况;
* */
public static int halfSearch(int arr[],int key)
{
int min,max,mid;
min=0;
max=arr.length-1; //max表示的是最大角标值
mid=(min+max)/2;
while(key!=arr[mid])
{
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;
}
}
问题1:为什么我在printInfor("排序前"+arr)里面加上“排序前”程序会报错:The method printInfor(int[]) in the type ArryDemo11 is not applicable for the arguments (String)?
问题2:经过bubbleSort(arr)冒泡排序后,已经拍好了数组,但是并没有打印出来,此时需要调用printInfor(arr)方法,那么忘打印方法中传递的参数为什么是已经排序好的arr参数,而不是最开始初始化的数组int arr[] ={28,38,98,17,39,87,88};他是怎么区分的??
|