------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
【排序中效率最高的是希尔排序】
java自带排序代码import java.util.*;
{Arrays.sort(arr);}
冒泡 排序
public static void bubbleSort(int[]arr)
{
for(int x=0;x<arr.length-1;x++) //for(int x=arr.length-1;x>0;x--)
{ //for(int y-0;y<x;y++)
for(int y=0;y<arr.length-x-1;y++)//-x:让每一次比较的元素减少,-1:避免角标越界。
{
if(arr[y]>arr[y+1])
{ int temp=arr[y];
arr[y]=arr[y+1];
arr[y+1]=temp; int []arr{1,2,8,4};
}
}
}
}
选择排序
public static void selectSort(int[]arr)
{
for(int x=0;x<arr.length-1;x++)
{
for(int y=x+1;y<arr.length;y++)
{
if(arr[x]>arr[y])
{
int temp=arr[x];
arr[x]=arr[y];
arr[y]=temp;
}
}
}
}
发现无论什么排序。都需要对满足条件的元素进行位置置换。
所以可以把这部分相同的代码提取出来,单独封装成一个函数。
public static void swap{int[]arr,int a,int b}
{
int temp=arr[a];
arr[a]=arr[b];
arr[b]=temp;
}
完整排序编码
class Demo12
{
public static void main(String[ ]args)
{ int []arr={5,2,4,1,6,7,9,8};
selectSort(arr);
paixu(arr);
selectSort(arr);
}
public static void paixu(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 a =arr[y];
arr[y]=arr[y+1];
arr[y+1]=a;
}}}}
public static void selectSort(int[]arr)
{
for(int x=0;x<arr.length;x++)
{
System.out.print("[");
if(x!=arr.length-1)
System.out.print(arr[x]+"];");
else
System.out.println(arr[x]+"] ");
}
}
}
折半查找:提高效率,但是必须要保证该数组是有序的数组
class Demo12
{
public static void main(String[ ]args)
{ int []arr={1,2,5,6,7,9,8};
int x=getcha(arr,7);
System.out.println("x="+x);
}
public static int getcha(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;
}
}
折半查找第二种方法
public static int getzhao_2(int[]arr,int key)
{int min=0,max=arr.length-1,mid;
while(min<=max)
{ mid=(min+max)/2;
if(key>arr[mid])
min=mid+1;
else if(key>arr[mid])
max=mid-1;
else
return mid;
}
return -1;}
十进制转二进制
public static void toBin=(int num)
{ StringBuffer sb=new StringBuffer();
while(num>0)
{ sb.append(num%2); //append 添加 算一个数存一个数
num=num/2;
}
System.out.println(sb.reverse());}} //sb.reverse()将sb存储中的值反转
十进制转十六进制
class Demo12
{
public static void main(String[]args)
{ getliu(60);}
public static void getliu(int num)
{ StringBuffer sb=new StringBuffer();
for(int x=0;x<8;x++)
{ int temp=num&15;
if(temp>9)
sb.append((char)(temp-10+'A'));
else
sb.append(temp);
num=num>>>4;}
System.out.println(sb.reverse());
}
}
查表法十进制 十六进制
class ArrayTest6
{
public static void main(String[]args)
{ toHex(-60);
}
public static void toHex(int num)
{if(num==0)
System.out.println(0);
return;
}
char[]chs={'0','1','2','3',
'4','5','6','7',
'8','9','A','B',
'C','D','E','F'};
char[]arr=new char[8];
int pos=arr.length;
while(num!=0)
{
int temp=num&15;
arr[--pos]=chs[temp];
num=num>>>4;
}
System.out.println("pos="+pos);
for(int x=pos;x<arr.length;x++)
{
System.out.print(arr[x]+",");
}}}
进制转换优化
class Demo13
{
public static void main(String[]args)
{
toHex(60);
}
十进制转二进制
public static void toBin(int num)
{
trans(num,1,1);
}
十进制转八进制
public static void toBa(int num)
{
trans(num,7,3);
}
十进制转十六进制
public static void toHex(int num)
{
trans(num,15,4);
}
public static void trans(int num,int base,int offset)
{
char[]chs={'0','1','2','3',
'4','5','6','7',
'8','9','A','B',
'C','D','E','F'};
char[]arr=new char[32];
int pos=arr.length;
while(num!=0)
{ int temp=num&base;
arr[--pos]=chs[temp];
num=num>>>offset;
}
for(int x=pos;x<arr.length;x++)
{ System.out.print(arr[x]);
}}
二维数组
System.out.println(arr.length);//打印是二维数组的长度
System.out.println(arr[0].length);//打印二维数组中第一个一维数组长度
求三个数组加起来的总和
class Demo13
{
public static void main(String[]args)
{int[][]arr={{1,2,3,4},{2,2,3,4},{3,4,5,6}};
int sum=0;
for(int x=0;x<arr.length;x++)
{
for(int y=0;y<arr[x].length;y++)
{ sum=sum+arr[x][y];}}
System.out.print("sum="+sum);
}}