常见查找与排序的数据结构算法与Java代码示例

197 阅读2分钟

1、查找算法

1. 顺序查找

原理:从列表的一端开始,逐个检查每个元素,直到找到所需元素或检查完所有元素。

Java代码示例:

public class SequentialSearch {
    public static int sequentialSearch(int[] array, int target) {
        for (int i = 0; i < array.length; i++) {
            if (array[i] == target) {
                return i;  // 找到目标,返回其索引
            }
        }
        return -1;  // 未找到目标
    }

    public static void main(String[] args) {
        int[] array = {1, 3, 5, 7, 9};
        int target = 5;
        int index = sequentialSearch(array, target);
        System.out.println("元素 " + target + " 在数组中的索引为: " + index);
    }
}

2. 二分查找

原理:在有序数组中,每次与中间元素比较,缩小查找范围至左半部分或右半部分,直到找到目标或范围缩小至空。

Java代码示例:

public class BinarySearch {
    public static int binarySearch(int[] array, int target) {
        int low = 0;
        int high = array.length - 1;

        while (low <= high) {
            int mid = low + (high - low) / 2;
            if (array[mid] == target) {
                return mid;  // 找到目标,返回其索引
            } else if (array[mid] < target) {
                low = mid + 1;  // 在右半部分继续查找
            } else {
                high = mid - 1;  // 在左半部分继续查找
            }
        }
        return -1;  // 未找到目标
    }

    public static void main(String[] args) {
        int[] array = {1, 3, 5, 7, 9};
        int target = 5;
        int index = binarySearch(array, target);
        System.out.println("元素 " + target + " 在数组中的索引为: " + index);
    }
}

2、排序算法

1. 冒泡排序

原理:重复地遍历数组,比较每对相邻的项,如果它们的顺序错误就把它们交换过来。

Java代码示例:

public class BubbleSort {
    public static void bubbleSort(int[] array) {
        int n = array.length;
        for (int i = 0; i < n - 1; i++) {
            for (int j = 0; j < n - i - 1; j++) {
                if (array[j] > array[j + 1]) {
                    // 交换位置
                    int temp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                }
            }
        }
    }

    public static void main(String[] args) {
        int[] array = {64, 34, 25, 12, 22, 11, 90};
        bubbleSort(array);
        System.out.println("排序后的数组: ");
        for (int num : array) {
            System.out.print(num + " ");
        }
    }
}

2. 选择排序

原理:在未排序序列中找到最小(或最大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(或最大)元素,然后放到已排序序列的末尾。

Java代码示例:

public class SelectionSort {
    public static void selectionSort(int[] array) {
        for (int i = 0; i < array.length - 1; i++) {
            int minIndex = i;
            for (int j = i + 1; j < array.length; j++) {
                if (array[j] < array[minIndex]) {
                    minIndex = j;
                }
            }
            // 交换位置
            int temp = array[minIndex];
            array[minIndex] = array[i];
            array[i] = temp;
        }
    }

    public static void main(String[] args) {
        int[] array = {64, 34, 25, 12, 22, 11, 90};
        selectionSort(array);
        System.out.println("排序后的数组: ");
        for (int num : array) {
            System.out.print(num + " ");
        }
    }
}