java (三)【数组】遍历、排序、折半查找

数组

数组的定义:同一种类型数据的集合,其实数组就是一个容器。

数组的好处:可以自动给数组中的元素从0开始编号,方便操作这些元素

格式一:

元素类型[]数组名 = new 元素类型[元素个数或数组长度]

int [] arr=new int [5];

格式二:

元素类型[]数组名=new 元素类型[]{元素,元素...};

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

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

 1 //用于打印数组中的元素,元素间用逗号隔开
 2 public class hello {
 3 
 4     public static void main(String[] args) {
 5     int [] arr= {1,2,3,4,54};
 6     qwe(arr);
 7     }
 8     public static void qwe(int [] arr)
 9     {
10         for (int i =0;i<arr.length;i++) //数组中有一个可以直接获取数组元素个数,length,使用方法:数组名.length=
11         {
12             if(i!=arr.length-1)
13                 System.out.print(arr[i]+",");
14             else
15                 System.out.println(arr[i]);
16         }
17     }
18     }

 

内存结构

栈内存:用于存储局部变量,当数据使用完,所占空间会自动释放

堆内存

  1. 数组和对象,通过new建立的实例都存放在堆内存中
  2. 每一个实体都有内存地址值
  3. 实体中的变量都有默认初始化值
  4. 实体不在被使用,会在不确定的时间内被垃圾回收器回收

 选择排序

 1   //获取数组元素中的最大值
 2   public class hello {
 3   
 4       public static void main(String[] args) {
 5      int [] arr= {1,2,3,4,54};
 6       int x =qwe(arr);
 7       System.out.println(x);
 8       }
 9      public static int qwe(int [] arr)
10      {
11          int max =arr[0];
12          for(int i=1; i<arr.length;i++)
13         {
14              if (arr[i]>max)
15              max=arr[i];
16      }
17         return max;
18     }
19      }

冒泡排序

定义:相邻的两个元素进行比较,如果符合条件换位

 

 1 public class asd {
 2 
 3     public static void main(String[] args) {
 4         int[] arr = { 1, 2, 3, 4, 54 };
 5         System.out.print("排序前");
 6         for (int i = 0; i < arr.length; i++) {
 7             System.out.print(arr[i]+",");
 8         }
 9         qwe(arr);
10         System.out.println();
11         System.out.print("排序后");
12         for (int i = 0; i < arr.length; i++) {
13             System.out.print(arr[i]+",");
14         }
15     }
16 
17     public static void qwe(int[] arr) {
18         for (int x = 0; x < arr.length - 1; x++) {
19             for (int y = 0; y < arr.length - x - 1; y++) {
20                 if (arr[y] < arr[y + 1]) {
21                     int temp = arr[y];
22                     arr[y] = arr[y + 1];
23                     arr[y + 1] = temp;
24                 }
25             }
26         }
27     }
28 }

 折半查找

定义:必须要保证该数组是有序的数组

 1 public class asd {
 2     public static void main(String[] args) {
 3 //        int  [] arr ={3,4,5,6,2,3,4};
 4 //        int index=qwe(arr,4);
 5 //        System.out.println("index="+index);
 6         int []arr ={1,3,4,5,7,8,12,33,455,666,777};
 7         int index=zxc_1(arr,3);
 8         System.out.println("index="+index);
 9     }
10     //折半查找第一种方法
11     public static int zxc(int []arr,int key)
12     {
13         int min,max,mid;
14         min=0;
15         max=arr.length-1;
16         mid=(min+max)/2;
17         while (arr[mid]!=key)
18         {
19             if(key >arr[mid])
20                 min=mid+1;
21             else if (key<arr[mid])
22                 max=mid-1;
23             if(min>max)
24                 return -1;
25             mid =(max+min)/2;
26         }
27         return mid;
28     }
29     //折半查找第二种方法
30     public static int zxc_1(int[] arr,int key)
31     {
32         int min,max,mid;
33         min=0;
34         max=arr.length-1;
35         while (min<=max)
36         {
37             mid =(max+min)/2;
38             if(key>arr[mid])
39                 min=mid +1;
40             else if (key<arr[mid])
41                 max=mid-1;
42             else 
43                 return mid;
44         }
45         return -1;
46     }
47     //定义功能,获取key第一次出现在数组中的位置,如果返回是-1,那么代表该key在数组中不存在
48     public static int qwe(int []arr,int key)
49     {
50         for (int x=0;x<arr.length;x++)
51         {
52             if(arr[x]==key)
53                 return x;
54         }
55         return -1;
56     }
57 }

 

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

public class asd {
    public static void main(String[] args) {
        int []arr ={1,3,4,5,7,8,12,33,455,666,777};
        int index=zxc_1(arr,3);
        System.out.println("index="+index);
    }
    public static int zxc_1(int[] arr,int key)
    {
        int min,max,mid;
        min=0;
        max=arr.length-1;
        while (min<=max)
        {
            mid =(max+min)/2;
            if(key>arr[mid])
                min=mid +1;
            else if (key<arr[mid])
                max=mid-1;
            else 
                return mid;
        }
        return min;
    }
    
}

 

posted @ 2015-07-31 14:51  花花妹子。  阅读(148)  评论(0)    收藏  举报