第四天总结0324

数组:
数组就是一个容器,一定要对这个有一个清楚的认识
求数组中数的最大值
排序
选择排序:
以升序为例
就是拿数组中的第一个数依次跟其他数进行比较,如果发现被比较的数比这个数小,则让这两个数进行互换
然后再拿第二个数进行比较,依次类推
冒泡排序
冒泡排序就是依次拿数组中的两个数进行比较,比完之后把大的数放在右边,这样一来,在进行完第一轮比较之后
最右边的数一定是最大的数;在第二轮比较中,最高位则不用比了
折半选择;
假如你要从一个数组中找到一个元素所对应的角标,就需要用到折半选择
1.第一种方式是通常的思路,先将数组中的数分成两边,让要选择的数跟中间值比较
如果该元素比中间值大,那么就在中间值和最大值之间继续折半选择,(循环的过程)
2.加入在折半的过程中,出现最小值比最大值还大,那么证明已经筛选过了,这个元素并不是该数组中的元素
数组的应用,
求十进制数的二进制和十六进制
其他见程序
面向对象的思想就是指挥对象做事、

class test4
{
 public static void main(String[] args)
 {
  getbin(-2);//求负2的2进制
  getoct(-26);//求负26的8进制
  gethax(-26);//求负26的十六进制
 }
 public static void getbin(int num)
 {
  tool(num,1,1);
 }
 public static void getoct(int num)
 {
  tool(num,7,3);
 }
 public static void gethax(int num)
 {
  tool(num,15,4);
 }
 private static void tool(int num,int base,int offset)//自己的写法,无法理解为什么老师if后面有个return
 {
  if (num==0)
  {
   System.out.println("0");
   return;/*这个return意思是直接返回函数,不在执行下面的数据块,如果没有这个,
      那么下面的就要用else包上,
      否则,程序在读完if之后会继续读下面的语句块,会提示错误
      */
  }
  //else
  //{
  char[] chr={'0','1','2','3','4',
        '5','6','7','8','9','A'
    ,'B','C','D','E','F'};
  char[] arr=new char[32];
  int pos=arr.length;
  while (num!=0)
  {
   int temp=num&base;
   arr[--pos]=chr[temp];
   num=num>>>offset;
  }
  for (int x=pos;x<arr.length ;x++)
  {
   System.out.print(arr[x]);
  }
  System.out.println();
  //}
 }
}

 

 

 

class test5
{
 public static void main(String[] args)
 {
  int[] arr1={3,5,6,1,23,4,54,7,32};
  int[] arr2={3,4,1,5,76,22,32,12};
  int[] arr3={0,1,2,3,4,5,6,7};
  printArray(arr1);
  get1(arr1);
  printArray(arr1);
  printArray(arr2);
  get2(arr2);
  printArray(arr2);
  int x=get5(arr3,6);
  System.out.println(x);
  
 }
 public static void get1(int[] arr)
 {
  for (int x=0;x<arr.length;x++)
  {
   for (int y=x+1;y<arr.length;y++)
   {
    if (arr[x]>arr[y])
    {
     swap(arr,x,y);
    }
   }
  }
 
 }
 public static void get2(int[] arr)
 {
  for (int x=0;x<arr.length;x++)
  {
   for (int y=0;y<arr.length-1-x;y++)
   {
    if (arr[y]>arr[y+1])
    {
     swap(arr,y,y+1);
    }
   }
  }
 }
 public static int get3(int[] arr,int key)
 {
  int min,max,mid;
  min=0;
  max=arr.length-1;
  mid=(max+min)/2;
  if (key<arr[min] || key>arr[max])//条件很重要,容易出错,数组必须是有序的
   return -1;
  while (key!=arr[mid])
  {
   if (key>arr[mid])
    min=mid+1;
   else if (key<arr[mid])
    max=mid-1;
   mid=(max+min)/2;
  }
  return mid;
 }
 public static int get4(int[] arr,int key)
 {
  int max,min,mid;
  min=0;
  max=arr.length-1;
  mid=0;
  while (key!=arr[mid])
  {
   mid=(max+min)/2;
   if (key>arr[mid])
    min=mid+1;
   else if (key<arr[mid])
    max=mid-1;
   if (min>max)
    return -1;
  }
  return mid;
 }
 public static int get5(int[] arr,int key)
 {
  int max,min,mid;
  min=0;
  max=arr.length-1;
  while (min<=max)//这里没有使用mid,所以前面不用给mid赋值,如果要使用一个变量,必须先给她赋值
  {    //上面还有一个思想,就是只要最小角标比最大角标小,就仍然能折半,所以循环就要继续进行下去
   mid=(max+min)/2;
    if (key<arr[mid])
     max=mid-1;
    else if (key>arr[mid])
     min=mid+1;
    else        //当循环到min=max的时候,就不用折半了,就证明这个数就是mid,也就是我们所要求的key的角标
     return mid;//所以就可以直接返回者mid,下面程序就结束了,不在运行
  }
  return -1;//如果min>max,也就是最小角标比最大角标大的时候,上面的while就不循环了,就直接输出一个负1
 }
 /*
 举例说明上面的函数
 如果数组时{0,1,2,3}要取-2的角标
 那么max=3,min=0,首先进0小于3,进入while循环,mid=1,-2<1,所以max=mid-1=0;
 此时的min=max=0,所以循环仍然在继续,min=0,读第一个if语句,-2<0也满足条件,所以max=0-1=-1
 在进入下一次循环判断,此时,min=0>max,所以循环中断,while不在读,跳出到下面的return -1
 */
 private static void swap(int[] arr,int x,int y)
 {
  int temp= arr[x];
  arr[x]=arr[y];
  arr[y]=temp;
 }
 private static void printArray(int[] arr)
 {
  for (int x=0;x<arr.length ;x++ )
  {
   if (x!=arr.length-1)
    System.out.print(arr[x]+",");
   else
    System.out.print(arr[x]);
  }
  System.out.println();
 }
}

 

 

/*
将一个数组中的元素反转
*/
class test3
{
 public static void main(String[] args)
 {
  int[] arr={1,2,3,4,5,6,7,8,9,10,11};
  printArray(arr);
  get1(arr);
  printArray(arr);
 }
/*
定义一个函数用于反转数组
*/
 private static void get1(int[] arr)
 {
  /*int x=0;              //第一种写法
  int y=arr.length-1;
  while (x<y)
  { 
   swap(arr,x,y);
   x++;
   y--;
  }*/
  int x=0;                //第二种写法
  int y=arr.length-1;
  while (x<y)
  {
   //y=arr.length-1-x;    //此行可以和x++后面一行进行互换
   swap(arr,x,y);
   x++;
   y=arr.length-1-x;
  }
 }
/*
定义一个函数用来给数组中的元素进行换位
*/
 private static void swap(int[] arr,int x,int y)
 {
  int temp= arr[x];
  arr[x]=arr[y];
  arr[y]=temp;
 }
/*
定义一个函数用来输出一个数组
*/
 private static void printArray(int[] arr)
 {
  for (int x=0;x<arr.length ;x++ )
  {
   if (x!=arr.length-1)
    System.out.print(arr[x]+",");
   else
    System.out.print(arr[x]);
  }
  System.out.println();
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值