黑马程序员_JavaSE基础05 之 数组的操作 求最值 排序 折半查找

来源:互联网 发布:linux 打开一个目录 编辑:程序博客网 时间:2024/04/30 15:12
----------------------      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
 
原创粉丝点击