您的位置:首页 > 职场人生

黑马程序员-day04数组排序,查找

2014-10-21 00:23 323 查看

1.数组的几种写法

int [] arr=new int[2];

int arr[]=new int[2];

int[] arr=new int[]{3,1,6,5,4};

int[] arr={3,1,6,5,4};

注意:数组对象存储于堆内存中,栈内存中存储的只是数组对象的引用地址值。

2.数组的排序

(1)选择排序

/*

选择排序。

内循环结束一次,最值出现在头角标位置上。

*/

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;

*/

swap(arr,x,y);

}

}

}

}

(2)冒泡排序

/*

冒泡排序

*/

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;

*/

swap(arr,y,y+1);

}

}

}

}

3.数组元素的查找

前提:数组元素是有序的。

(1)折半查找第一种方式

/*

折半查找,提高效率,但是必须保证该数组是有序的数组。

*/

public static int halfSearch(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;

}

(2)折半查找第二种方式

/*

折半的第二种方式。

*/

public static int halfSearch_2(int[]arr,int key)

{

int min,max,mid;

min=0;

max=arr.length-1;

while (min<=max)

{

mid=(min+max)>>1;

if(key>arr[mid])

min=mid+1;

else if(key<arr[mid])

max=mid-1;

else

return mid;

}

return -1;

}

(3)练习

/*

练习:有一个有序的数组,想要将一个元素插入到该数组中,

还要保证该数组是有序的。如何获取该元素在数组中的位置?

*/

public static int getIndex_2(int[]arr,int key)

{

int min,max,mid;

min=0;

max=arr.length-1;

while (min<=max)

{

mid=(min+max)>>1;

if(key>arr[mid])

min=mid+1;

else if(key<arr[mid])

max=mid-1;

else

return mid;

}

return min;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: