---------------------- android培训、java培训、期待与您交流! ---------------------
JavaSE_05 笔记
Java语言基础之 数组的操作 求最值 排序 折半查找
1、关于数组定义两种方式
①只指定存储空间大小,不明确空间的具体数据。
②明确空间的具体数据。
2、关于数组的操作
对数组基本操作是存和取,核心思想是对角标的操作。
演化成 遍历、最值、排序、查找。
3、对数组求最值得操作
两种方式使用max记录最大值;或者maxIndex记录。
//方式二 用角标获取数组最大值的方法
public static int GetMax2(int[] arr)
{
//定义变量记录最大值的角标
int maxIndex=0;
for(int i=1;i<arr.length;i++)
{
if(arr[i]>arr[maxIndex])
{
maxIndex=i;
}
}
return arr[maxIndex];
}
4、使用选择排序实现从小到大排序
思路:外循环控制总比较次数,内循环控制一个元素的比较次数,内部循环实现是让第i个元素和其身后的每个元素进行比较,若arr[i]>arr[i+1..],那么就换位,总之是让arr[i]记录的是最小值。
//注意的是返回值不用再返回数组了,因为你是对堆内存的操作,不随函数的结束而结束,说白了原数组随着你的鼓捣而发生了改变。
//[34,19,11,3,56]
public static void selectSort(int[] arr)
{
//外层控制总循环次数
for(int i=0;i<arr.length-1;i++)
{
//内存控制当前元素的循环
for(int j=i+1;j<arr.length;j++) //从小到大
{
//因为从小到大,若第i位大于第i+1位,那么换
if(arr[i]>arr[j])
{
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
}
5、使用冒泡排序实现从小到大排序
思路:首先外层进行比较次数的循环,内层控制一个元素比较的循环,内循环借用第三方变量实现相邻两个元素的比较,反正是让最后的值最大,对于从小到大排序前提是是max[i]>max[i+1],才能换位。
//[34,19,11,3,56]
public static void bubbleSort(int[] arr)
{
for(int i=0;i<arr.length-1;i++)
{
for(int j=0;j<arr.length-i-1;j++)
{
//因为对于从小到大,若第j位大于第j+1位,就换
if(arr[j]>arr[j+1])
{
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
6、排序总结:对于从小到大排序。
选择排序的核心思想是:拿一个元素和身后所有的值比较,反正我要保证这个元素值最小。我要保证第1位最小。
冒泡排序的核心思想是:拿相邻两个元素比较,反正我要保证最后一个元素值最大。我要保证最后一位最大。
7、折半查找:对于有顺序的数据
//折半查找 public static int halfSearch(int arr[],int key) { int min=0; int max=arr.length; int mid=(min+max)/2; while(min<=max) { if(arr[mid]>key) { min=mid+1; } else if(arr[mid]<key) { max=mid-1; } else return mid; } return -1; }
return -1;
}
2012/9/02 By Mary_k