A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

hongyeyouqing

中级黑马

  • 黑马币:-7

  • 帖子:49

  • 精华:0

/*
需求:定义一个数组{-3,5,-2,-6,7,-1,4,9,-8}
          1.对数组进行遍历打印
          2.获取数组的最大和最小值
          3.用选择排序和冒泡排序对数组排序
          4.对给定的数组进行反转
          5.数组元素的查找
*/

class ArrayDemo
{
        public static void main(String[] args)
        {
                int[] arr={-3,-8,5,-2,9,-6,7,-1,4};
                printArray(arr);

                int max=getMax(arr);
                System.out.println("数组最大值:"+max);

                int min=getMin(arr);
                System.out.println("数组最小值:"+min);

                //selectSort(arr);
                bubbleSort(arr);
                printArray(arr);
        }
       
       
//定义一个打印数组的函数printArray
        public static void printArray(int[] arr)
        {
                System.out.print("[");
                for(int x=0;x<arr.length;x++)
                {
                        if(x!=arr.length-1)//最大角标之前的元素打印时同时打印个,号与后面的元素隔开
                        {
                                System.out.print(arr[x]+",");
                        }
                        else
                        {
                                System.out.println(arr[x]+"]");
                        }
                }
        }

//定义一个找出数组最大值函数getMax
        public static int getMax(int[] arr)
        {
                int max = arr[0];//定义一个初始化值用于记录数组中的最值
                for(int x=0;x<arr.length;x++)
                {
                        if(arr[x]>max)
                        {
                                max=arr[x];
                        }
                }
                return max;
        }

//定义一个找出数组最小值函数getMin
        public static int getMin(int[] arr)
        {
                int min = arr[0];//定义一个初始化值用于记录数组中的最值
                for(int x=0;x<arr.length;x++)
                {
                        if(arr[x]<min)
                        {
                                min=arr[x];
                        }
                }
                return min;
        }

        //定义一个对数组进行排序的函数
        //1.选择排序法:将头角标位元素与后面的元素逐一比较,循环一次后最小值到了头角标位
        public static void selectSort(int[] arr)
        {
                for(int x=0;x<arr.length-1;x++)
                {
                        for(int y=x+1;y<arr.length;y++)//将头角标位元素与后面的元素逐一比较
                        {
                                if(arr[x]>arr[y])//如果arr[x]>arr[x+1]就进行换位
                                {
                                        int temp=arr[x];
                                        arr[x]=arr[y];
                                        arr[y]=temp;
                                }
                        }
                }
        }
        //2.冒泡排序法:将相邻的两元素都进行比较,循环一次后,最大值到了最后角标位
        public static void bubbleSort(int[] arr)
        {
                for(int x=0;x<arr.length-1;x++)
                {
                        for(int y=0;y<arr.length-x-1;y++)//-x:让每一次比较的元素减少,-1:避免角标越界。
                        {
                                if(arr[y]>arr[y+1])//将相邻的两元素进行比较
                                {
                                        int temp=arr[y];
                                        arr[y]=arr[y+1];
                                        arr[y+1]=temp;
                                }
                        }
                }
        }

//对给定的数组进行反转
        public static void reverseArray(int[] arr)
        {
                for(int start=0,end=arr.length-1; start<end ; start++,end--)
                {
                        /*
                        int temp = arr[start];
                        arr[start] = arr[end];
                        arr[end] = temp;
                        */
                        swap(arr,start,end);
                }
        }
        public static void swap(int[] arr,int a,int b)
        {
                int temp = arr[a];
                arr[a] = arr[b];
                arr[b] = temp;
        }

//数组元素的查找:
        //折半查找:提高效率,但是必须要保证该数组是有序的数组。
        public static int halfSearch(int[] arr,int key)
        {
                int min = 0,max = arr.length-1,mid;

                while(min<=max)
                {
                        mid = (max+min)>>1;

                        if(key>arr[mid])
                                min = mid + 1;
                        else if(key<arr[mid])
                                max = mid - 1;
                        else
                                return mid;
                }
                return -1;
        }

        //折半查找扩展:将一个数插入某一有序数组,插入的角标位置
        public static int getIndex(int[] arr,int key)
        {
                int min = 0,max = arr.length-1,mid;

                while(min<=max)
                {
                        mid = (max+min)>>1;

                        if(key>arr[mid])
                                min = mid + 1;
                        else if(key<arr[mid])
                                max = mid - 1;
                        else
                                return mid;
                }
                return min;
        }

}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马