选择排序:选择排序就是第一个元素分别跟第二个元素,第三个元素一直到最后一个元素进行比较,如果比它们大,就交换位置。用程序如下所示:
public static void main()
{
int[] arr={34,19,11,109,46};
for(int x=0;x<arr.length-1;x++)
{
for(int y=i+1;y<arr.length;y++)
{
if(arr[x]>arr[y])
{
int temp=arr[x];
arr[x]=arr[y];
arr[y]=temp;
}
}
}
for(int x=0;x<arr.length;x++)
{
System.out.println(arr[x]);
}
}
冒泡排序:
冒泡排序就是第一个元素跟第二个元素进行比较,如果比它大,就交换位置;第二个元素再跟第三个元素进行比较,如果第二个元素大于第三个就交换位置,一直比到最后一个元素。一轮下来后,最后一个角标存储的将是数组中的最大值。之后以此类推,在一次进行,得到第二大的值存储到倒数第二个角标中。实现冒泡排序的方法有两种,分别如下所示:
方式一:
for(int x=0;x<arr.length-1;x++)
{
for(int y=0;y<arr.length-1-x;y++)
{
if(arr[y]>arr[y+1])
{
int temp=arr[y];
arr[y]=arr[y+1];
arr[y+1]=temp;
}
}
}
方式二:
for(int x=arr.length-1;x>=0;x--)
{
for(int y=0;y<x;y++)
{
if(arr[y]>arr[y+1])
{
int temp=arr[y];
arr[y]=arr[y+1];
arr[y+1]=temp;
}
}
}
数组常见功能:
(1)查找:一个一个查找,效率较低
public static int getIndex(int[] arr,int key)
{
for(int x=0;x<arr.length;x++)
{
if(arr[x]==key)
return x;
}
return -1;
}
(2)折半查找:取中间值进行比较,如果要找的值比中间值大,那么再取中间值的下一个到最后一个的中间值进行比较,以此类推;如果比中间值小,那么取第一个到中间值的前一个的中间值进行比较,以此类推。
public static int getIndexByHalf(int[] arr,int key)
{
int max,min,mid;
max=arr.length-1;
min=0;
mid=(max+min)/2;
while(arr[mid]!=key)
{
if(key>arr[mid])
min=mid+1;
else if(key<arr[mid])
{
max=mid-1;
}
if(max<min)
return -1;
mid=(max+min)/2;
}
return mid;
}
public static int getIndexByHalf_2(int[] arr,int key)
{
while(min<=max)
{
mid=(max+min)>>1;
if(key>arr[mid])
min=mid+1;
else if(key<arr[mid])
max=mid-1;
else return mid;
}
return -1;
}