黑马程序员--数组(二)常见算法

 

 

给定一个数组(5,1,6,4,2,8,9)

  1. 获取数组中的最大值,以及最小值

获取数组中的最大值

思路:

  1. 获取最值需要进行比较,每一次比较都会有一个较大的值,因为该值不确定

通过一个变量进行临是存放

  1. 让数组中的每一个元素都和这个变量中的值进行比较

如果大于了变量中的值,就用该变量记录较大值

  1. 当所有的元素都比较完成,那么该变量中存储的就是数组中的最大值了

 

步骤:

1.定义变量,临时存放较大值,该变量初始化为数组中任意一个元素即可

2.通过循环语句对数组进行遍历

3.在变量过程中定义判断条件,如果遍历到的元素比变量中的元素大,就赋值给该变量;

 

需要定义一个功能来完成,以便提高复用性

  1. 明确结果,数组中的最大元素 int
  2. 未知内容:一个数组 int[ ]

 

获取数组中最大值:

方法1;

代码示例:

class  MaxDemo

{

   public static void main(String[] args)

   {

            int []arr={5,1,6,4,2,8,9};

            int max=getMax(arr);

            System.out.println("最大值是:"+max);

   }

   public static int getMax(int []arr){

            int max=arr[0];

            for(int i=1;i<arr.length;i++){

                     if(arr[i]>max){

                               max=arr[i];

                     }

            }

            return max;

   }

}

 

结果:

 

方法2

获取最大值得另一个方式

可以将变量初始化为0,但是是在初始化数组中任意一个角标,不能是元素

代码示例:

class  MaxDemo

{

public static void main(String[] args)

{

           int []arr={5,1,6,4,2,8,9};

           int max=getMax(arr);

           System.out.println("最大值是:"+max);

}

public static int getMax(int []arr){

           int max=0;

           for(int i=1;i<arr.length;i++){

                    if(arr[i]>arr[max]){

                             arr[max]=arr[i];

                    }

           }

           return arr[max];

}

}

 

 

结果:

 

 

获取数组中的最小值

代码示例:

class  MinDemo

{

   public static void main(String[] args)

   {

            int []arr={5,1,6,4,2,8,9};

            int min=getMin(arr);

            System.out.println("最小值是:"+min);

   }

   public static int getMin(int []arr){

            int min=arr[0];

            for(int i=1;i<arr.length;i++){

                     if(arr[i]<min){

                               min=arr[i];

                     }

            }

            return min;

   }

}

 

结果:

 

 

 

  1. 对给定数组进行排序(选择排序

 

代码示例;

class  ArraySortDemo

{

   public static void main(String[] args)

   {

            int []arr={3,6,2,9,1,5,0};

            System.out.println("排序前");

        show(arr);

            sort(arr);

            System.out.println("排序后");

            show(arr);

           

   }

   //排序方法

   public static void sort(int[]arr){

   for(int i=0;i<arr.length-1;i++){

            for(int j=i+1;j<arr.length;j++){

                     if(arr[i]>arr[j]){

                               int temp=arr[i];

                               arr[i]=arr[j];

                               arr[j]=temp;

                     }

            }

    }

   }

   //打印数组方法

   public static void show(int [] arr){

            for(int i=0;i<arr.length;i++){

                     if(i!=arr.length-1){

                               System.out.print(arr[i]+",");

                     }else{

                               System.out.println(arr[i]);

                     }

            }

   }

 }

 

 

结果:

 

 

冒泡排序法

冒泡排序:相邻的两个元素进行比较,如果符合条件换位

第一圈:最值出现在了最后位

 

代码示例:

class  ArraySortDemo

{

   public static void main(String[] args)

   {

            int []arr={3,6,2,9,1,5,0};

            System.out.println("排序前");

        show(arr);

            sort(arr);

            System.out.println("排序后");

            show(arr);

   }

   //排序方法

   public static void sort(int[]arr){

   for(int i=0;i<arr.length-1;i++){

            for(int j=i+1;j<arr.length;j++){//-x:让每一次比较元素较少,-1:避免角标越界

                     if(arr[i]>arr[j]){

                               int temp=arr[i];

                               arr[i]=arr[j];

                               arr[j]=temp;

                     }

            }

    }

   }

   //打印数组方法

   public static void show(int [] arr){

            for(int i=0;i<arr.length;i++){

                     if(i!=arr.length-1){

                               System.out.print(arr[i]+",");

                     }else{

                               System.out.println(arr[i]);

                     }

            }

   }

 }

 

 

结果:

 

 

 

发现无论什么排序,都需要对满足条件的元素进行位置置换

所以可以把这部分相同的代码提取出来,单独封装一个函数

 

 public static void swap(int [ ] arr,int a,int b){

            int temp=arr[a];

     arr[a]=arr[b];

     arr[b]=temp;

}

 

Arrays.sort(Array[ ] arr );方法是java中已经定义好的一中排序方式,开发中,对数组排序,要使用该句代码

 

 

 

数组的查找操作

折半法:

/*

折半查找:

提高效率,但是必须要保证给数组是有序的数组

*/

 

class  ArraySeactDemo

{

         public static void main(String[] args)

         {

                   int [] arr={2,4,5,7,19,32,45};

//int index=halfSearch(arr,5);

                   int index=halfSearch_2(arr,5);

                   System.out.println(index);

         }

         public static int halfSearch(int [] arr,int key){

                   int min,max,mid;

                   min=0;//第一个角标

                   max=arr.length-1;//最后一个角标

                   mid=(min+max)/2;//折半

                   //循环条件,当中间值不等于要查找的值,就一直循环查找

                   while(arr[mid]!=key){

                            if(key>arr[mid]){

                                     min=mid+1;

                            }else if(key<arr[mid]){

                                     max=mid-1;

                                     //当没有相同的时候,返回-1

                                     if(min>max){

                                               return -1;

                                     }

                            }

                            mid=(min+max)/2;

                   }

                   return mid;

         }

         /*

         折半方法2

         */

         public static int halfSearch_2(int []arr,int key){

                   int min=0,max=arr.length,mid;

                   //当min<=max就折半

                   while(min<=max){

                            mid=(min+max)>>1;

                            if(key>arr[mid]){

                                     min=mid+1;

                            }else if(key<arr[mid]){

                                     max=mid-1;

                            }else{

                                     return mid;

                            }

                   }

                   return -1;

         }

}

结果:

 

 

 

 

 

 

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

详细请查看:<a href="http://edu.csdn.net" target="blank">http://edu.csdn.net</a>

posted @ 2013-12-23 19:58  h19891117  阅读(225)  评论(0编辑  收藏  举报