www.bersaty.com

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;
    }
}

 

posted @ 2013-08-14 09:16  bersaty  阅读(2004)  评论(0编辑  收藏  举报