欢迎访问宙启技术站
智能推送

Java函数实现算法:排序、查找、图算法等算法函数实现方法

发布时间:2023-07-30 01:05:45

在Java中,我们可以使用函数来实现各种算法,包括排序、查找、图算法等。下面将介绍一些常见算法的实现方法。

一、排序算法实现方法

1. 冒泡排序:比较相邻的元素,如果前一个比后一个大,则交换它们的位置,重复该过程,直到整个数组排序完成。

代码示例:

public void bubbleSort(int[] arr){
    int n = arr.length;
    for (int i = 0; i < n - 1; i++){
        for (int j = 0; j < n - i - 1; j++){
            if (arr[j] > arr[j + 1]){
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

2. 插入排序:将数组分为已排序和未排序两部分,每次从未排序部分选取一个元素插入到已排序部分的适当位置。

代码示例:

public void insertionSort(int[] arr){
    int n = arr.length;
    for (int i = 1; i < n; i++){
        int key = arr[i];
        int j = i - 1;
        while (j >= 0 && arr[j] > key){
            arr[j + 1] = arr[j];
            j--;
        }
        arr[j + 1] = key;
    }
}

3. 快速排序:选择一个元素作为基准,将数组分为比基准小和比基准大的两部分,然后递归地对这两部分进行排序。

代码示例:

public void quickSort(int[] arr, int low, int high){
    if (low < high){
        int pivot = partition(arr, low, high);
        quickSort(arr, low, pivot - 1);
        quickSort(arr, pivot + 1, high);
    }
}

private int partition(int[] arr, int low, int high){
    int pivot = arr[high];
    int i = low - 1;
    for (int j = low; j < high; j++){
        if (arr[j] < pivot){
            i++;
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }
    int temp = arr[i + 1];
    arr[i + 1] = arr[high];
    arr[high] = temp;
    return i + 1;
}

二、查找算法实现方法

1. 二分查找:对于有序数组,从中间元素开始比较,如果不等于目标元素,则根据大小关系缩小查找范围,直到找到目标元素或查找范围为空。

代码示例:

public int binarySearch(int[] arr, int target){
    int low = 0, high = arr.length - 1;
    while (low <= high){
        int mid = (low + high) / 2;
        if (arr[mid] == target){
            return mid;
        }
        else if (arr[mid] < target){
            low = mid + 1;
        }
        else{
            high = mid - 1;
        }
    }
    return -1;
}

2. 线性查找:从数组的 个元素开始逐个比较,直到找到目标元素或遍历完整个数组。

代码示例:

public int linearSearch(int[] arr, int target){
    int n = arr.length;
    for (int i = 0; i < n; i++){
        if (arr[i] == target){
            return i;
        }
    }
    return -1;
}

三、图算法实现方法

1. 广度优先搜索(BFS):从起始顶点开始,逐层遍历图中的顶点,直到找到目标顶点或遍历完整个图。

代码示例:

public void bfs(int start, int target){
    boolean[] visited = new boolean[numVertices()];
    Queue<Integer> queue = new LinkedList<>();
    queue.add(start);
    visited[start] = true;
    while (!queue.isEmpty()){
        int vertex = queue.poll();
        if (vertex == target){
            System.out.println("Target found!");
            return;
        }
        List<Integer> neighbors = getNeighbors(vertex);
        for (int neighbor : neighbors){
            if (!visited[neighbor]){
                queue.add(neighbor);
                visited[neighbor] = true;
            }
        }
    }
    System.out.println("Target not found!");
}

2. 深度优先搜索(DFS):从起始顶点开始,递归地遍历图中的顶点,直到找到目标顶点或遍历完整个图。

代码示例:

public void dfs(int start, int target, boolean[] visited){
    visited[start] = true;
    if (start == target){
        System.out.println("Target found!");
        return;
    }
    List<Integer> neighbors = getNeighbors(start);
    for (int neighbor : neighbors){
        if (!visited[neighbor]){
            dfs(neighbor, target, visited);
        }
    }
    System.out.println("Target not found!");
}

以上是一些常见算法在Java中的实现方法。根据具体的需求,我们可以选择合适的算法来解决问题。希望对你有帮助!