重点在于循环嵌套的理解和使用
排序:
选择冒泡 二分法
选择:
class ArrayTest1
{
publicstatic void main(String[] args)
{
int[]arr = {5,1,6,4,2,8,9};
intmax = 0;
inttemp;
for(int x = 0; x<arr.length-1 ; x++ )
{
for(int y = x+1 ; y <arr.length ; y++ )
{
if(arr[y]>arr[x])
{
temp= arr[y];
arr[y]= arr[x];
arr[x]= temp;
}
}
}
for(int a : arr )
{
sop(a);
}
}
publicstatic void swap(int a , int b) //注意 这个函数是没有效果的
{
inttemp;
temp= a;
a= b;
b=temp;
}
publicstatic void sop(Object obj)
{
System.out.println(obj);
}
}
冒泡
class ArrayTest2
{
publicstatic void main(String[] args)
{
int[]arr = {5,1,6,4,2,8,9};
inttemp;
for(int x = 0; x<arr.length ; x++ )
{
for(int y = arr.length-1 ; y > x ; y-- )
{
if(arr[y]<arr[y-1])
{
temp= arr[y];
arr[y]= arr[y-1];
arr[y-1]= temp;
}
}
}
for(int a : arr )
{
sop(a);
}
}
publicstatic void sop(Object obj)
{
System.out.println(obj);
}
}
外圈是大体控制内圈是精细控制
查找:
折半条件是对有序数组的查找
注意:
跳出循环的条件是max>=min
原因是如果没有则说明这个数字在数组中的某两个相邻数字之间
设这两个数字为a和b
则该数字c为:
a<c<b 那么a为min b为max mid在a上
当第一次比较的时候 c>a min向右移动此时mid min max重合都在b处
但依然没有找到
当第二次比较的时候 mid在b上 c<b max向左移动此时max<min 这样就可以跳出了说明没找到
class ArrayTest4
{
publicstatic void main(String[] args)
{
int[]arr = {3,1,5,4,2,9};
intflag = halfSearch(2,arr);
sop(flag);
}
publicstatic int halfSearch(int a, int[] arr)
{
int[]myarr = selectSort(arr);
intmin,mid,max;
min= 0;
max= myarr.length-1;
mid= (min+max)/2;
//数组从大到小还是从小到大 是对程序有影响的 要理解才能变通!
while( a != myarr[mid])
{
if(a>myarr[mid])
{
max= mid-1;
}
elseif (a<myarr[mid])
{
min= mid+1;
}
if(min>max)
{
return-1;
}
mid= (min+max)/2;
}
returnmid;
}
publicstatic int[] selectSort(int[] arr)
{
inttemp;
for(int x = 0; x<arr.length-1 ; x++ )
{
for(int y = x+1 ; y <arr.length ; y++ )
{
if(arr[y]>arr[x])
{
temp= arr[y];
arr[y]= arr[x];
arr[x]= temp;
}
}
}
returnarr;
}
publicstatic void sop(Object obj)
{
System.out.print(obj);
}
}
进制转换(原理已述)