查找算法

 顺序查找

import java.util.Scanner;

public class search {
    static int search(int arr[], int x) {
        int f = -1;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == x) {
                f = i;
            }
        }
        return f;
    }


    public static void main(String args[]) {
        int[] a = new int[50];
        for (int i = 0; i < 50; i++) {
            a[i] = (int) (100 + Math.random() * (100 + 1));
        }
        System.out.print("顺序查找算法演示!\n");
        System.out.print("数据序列:\n");
        for (int i = 0; i < a.length; i++) {
            System.out.print(" " + a[i]);                    //输出序列
        }
        System.out.print("\n\n");
        System.out.print("输入要查找的数:");
        Scanner input = new Scanner(System.in);
        int x = input.nextInt();                            //输入要查找的数

        int n = search(a, x);                    //查找

        if (n < 0)                                //输出查找结果
        {
            System.out.println("没找到数据:" + x);
        } else {
            System.out.println("数据:" + x + " 位于数组的第" + (n + 1) + " 个元素处。");
        }

    }
}

折半查找

import java.util.Scanner;


public class search {
    static void quick(int arr[], int left, int right) {
        int f, t, rtmp, ltmp;
        ltmp=left;
        rtmp=right;
        f=arr[(left+right)/2];
        while (ltmp<rtmp){
            while (arr[ltmp]<f){
                ++ltmp;
            }
            while (arr[rtmp]>f){
                --rtmp;
            }
            if(ltmp<=rtmp){
                t=arr[ltmp];
                arr[ltmp]=arr[rtmp];
                arr[rtmp]=t;
                --rtmp;
                ++ltmp;
            }
        }
        if(ltmp==rtmp)
        {
            ltmp++;
        }
        if(left<rtmp){
            quick(arr,left,ltmp-1);
        }
        if(ltmp<right)
        {
            quick(arr,rtmp+1,right);
        }
    }

    static int search(int arr[], int x) {
        int mid,low,high;
        low=0;
        high=arr.length-1;
        while (low<=high)
        {
            mid=(low+high)/2;
            if(arr[mid]==x)
                return mid;
            else if(arr[mid]>x)
                high=mid-1;
            else low=mid+1;
        }
        return -1;
    }


    public static void main(String args[]) {
        int[] a = new int[50];
        for (int i = 0; i < 50; i++) {
            a[i] = (int) (100 + Math.random() * (100 + 1));
        }
        quick(a,0,a.length-1);
        System.out.print("顺序查找算法演示!\n");
        System.out.print("数据序列:\n");
        for (int i = 0; i < a.length; i++) {
            System.out.print(" " + a[i]);                    //输出序列
        }
        System.out.print("\n\n");
        System.out.print("输入要查找的数:");
        Scanner input = new Scanner(System.in);
        int x = input.nextInt();                            //输入要查找的数
        int n = search(a, x);                    //查找

        if (n < 0)                                //输出查找结果
        {
            System.out.println("没找到数据:" + x);
        } else {
            System.out.println("数据:" + x + " 位于数组的第" + (n + 1) + " 个元素处。");
        }

    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值