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

----------------------      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
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值