zoukankan      html  css  js  c++  java
  • java基础知识4--数组,排序,二分查找

    数组:

    import java.io.*;
    class Testdog 
    {
        public static void main(String[] args) throws Exception
        {
            Dog dogs[] = new Dog[4];
            float sumWeight=0;
            //给狗赋值
            //从控制台输入各个狗的信息
            InputStreamReader isr = new InputStreamReader(System.in);
            BufferedReader br = new BufferedReader(isr);
            for(int i=0;i<4;i++)
            {
                dogs[i]=new Dog();
                System.out.println("请输入第"+(i+1)+"只狗名:");
                String name = br.readLine();
                //将名字赋给对象
                dogs[i].setName(name);
                System.out.println("请输入狗的体重:");
                String s_weight=br.readLine();
                //将String转成float
                float weight=Float.parseFloat(s_weight);
                sumWeight+=weight;
                //将weight赋给对象;
                dogs[i].setWeight(weight);
            }
            //计算平均值
            System.out.println("总体重:"+sumWeight+"  平均体重:"+sumWeight/dogs.length);
    
        }
    }
    //定义一个狗类
    class Dog
    {
        private String name;
        private float weight;
        public void setName(String name)
        {
            this.name=name;
        }
        public void setWeight(float weight)
        {
            this.weight=weight;
        }
        public String getName(String name)
        {
            return name;
        }
        public float getWeight(float weight)
        {
            return weight;
        }
    
    }

     字符串相等用equals,“==”比较的是地址。

    排序:

    1.内部排序:将要处理的所有数据都加载到内部存储器中进行排序。

       包括(交换式排序法选择排序法插入式排序法);

    import java.util.*;
    class Sort 
    {
        
        public static void main(String[] args) 
        {
            int len=10;
            int arr[]=new int[len];
            for(int i=0;i<len;i++)
            {
                arr[i]=(int)(Math.random()*10000);
            }
    
            SortFun bubble = new SortFun();
    
            Calendar cal = Calendar.getInstance();
            System.out.println("排序前:"+cal.getTime());
    
            //bubble.bubblesort(arr);//复合对象,传简单对象不会改变
            //bubble.selectsort(arr);
            //bubble.insertsort(arr);
            bubble.quicksort(arr,0,arr.length-1);
    
            System.out.println("排序后:"+cal.getTime());
    
    
            for(int i=0;i<arr.length;i++)
            System.out.println(arr[i]);
        }
    }
    
    class SortFun
    {
        //冒泡排序  n*n
        public void bubblesort(int args[])
        {
            int temp=0;
            for(int i=0;i<args.length-1;i++)
            {
                for(int j=0;j<args.length-1-i;j++)
                {
                    if(args[j]>args[j+1])
                    {
                        temp=args[j];
                        args[j]=args[j+1];
                        args[j+1]=temp;
                    }
                }
            }
        }
        //选择排序   n*n
        public void selectsort(int arr[])
        {
            int min=0;
            int t=0;
            for(int i=0;i<arr.length-1;i++)
            {
                min=i;
                //找到剩下数中最小数的下标
                for(int j=i+1;j<arr.length;j++)
                {
                    if(arr[j]<arr[min])
                    {
                        min=j;
                    }
                }
                //不是同一个数则交换
                if(i!=min)
                {
                    t=arr[min];
                    arr[min]=arr[i];
                    arr[i]=t;
                }
            }
        }
    
        //插入排序  n*n
        public void insertsort(int arr[])
        {
            int i=0;
            int j=0;
            for(i=1;i<arr.length;i++)
            {
                int temp=arr[i];
                for(j=i;j>0&&arr[j-1]>temp;j--)
                {
                    arr[j]=arr[j-1];
                }
                arr[j]=temp;
            }
        }
    
        //快速排序  n*log2N
        public void quicksort(int arry[],int left,int right)
        {
            int i=left,j=right,key=arry[left];
            while(i<j)
            {
                while(i<j&&arry[j]>=key) j--;
                arry[i]=arry[j];
                while(i<j&&arry[i]<=key) i++;
                arry[j]=arry[i];
            }
            arry[i]=key;
            if(i-left>0) quicksort(arry,left,i-1);
            if(right-i>0) quicksort(arry,i+1,right);
        }
      //堆排序
      //shell排序
      //二叉树排序
      //合并排序(外部排序的常用方法)
    }

     2.外部排序:数据量过大,需要借助外部存储进行排序,包括(合并排序直接合并排序法)。

     各种排序的时间复杂度:

    查找:

    1.顺序查找

    2.二分查找(配合排序)

    import java.io.*;
    
    class  binarySearch
    {
        public static void main(String[] args) throws Exception
        {
            int arr[]=new int[]{1,3,5,7,9,10,11,12,16};
            Search se = new Search();
            InputStreamReader isr = new InputStreamReader(System.in);
            BufferedReader br = new BufferedReader(isr);
            System.out.println("请输入要查找的值:");
            String s_ans = br.readLine();
            int ans = Integer.parseInt(s_ans);
            System.out.println(se.Fun(arr,ans));
        }
    }
    
    class Search
    {
        public int Fun(int []arr,int ans)
        {
            int low=0;
            int high=arr.length-1;
            while(low<=high)
            {
                int middle=(low+high)/2;
                if(ans==arr[middle])
                {
                    return middle;
                }
                else if(ans<arr[middle])//在前半段
                {
                    high=middle-1;
                }
                else//在后半段
                {
                    low=middle+1;
                }
            }
            return -1;
        }
    }
  • 相关阅读:
    边工作边刷题:70天一遍leetcode: day 11-1
    边工作边刷题:70天一遍leetcode: day 11
    边工作边刷题:70天一遍leetcode: day 12-1
    边工作边刷题:70天一遍leetcode: day 12
    边工作边刷题:70天一遍leetcode: day 13-1
    边工作边刷题:70天一遍leetcode: day 13-2
    边工作边刷题:70天一遍leetcode: day 13
    边工作边刷题:70天一遍leetcode: day 14-1
    边工作边刷题:70天一遍leetcode: day 14
    边工作边刷题:70天一遍leetcode: day 15
  • 原文地址:https://www.cnblogs.com/bersaty/p/3253214.html
Copyright © 2011-2022 走看看