顺序查找
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) + " 个元素处。");
}
}
}