Java查找算法和排序算法综合实现

查找算法和排序算法综合实现

/**
* 查找算法:顺序查找()和折半查找()(二分查找)
* 排序算法:
* 交换排序:冒泡排序(),快速排序()
* 插入排序:直接插入排序(*),希尔排序
* 选择排序:简单选择排序(),堆排序()
* 归并排序:归并排序(*)
* 分配排序:箱排序,基数排序
*/

示例代码:

代码综合实现了两种基本查找算法:顺序查找和折半查找;
六种基本排序算法:冒泡排序、直接插入排序、简单选择排序、快速排序、归并排序以及堆排序。

import java.util.Arrays;
import java.util.Scanner;

/**
 * 查找算法和排序算法综合实现
 * 查找算法:顺序查找(*)和折半查找(*)(二分查找)
 * 排序算法:
 * 交换排序:冒泡排序(*),快速排序(*)
 * 插入排序:直接插入排序(*),希尔排序
 * 选择排序:简单选择排序(*),堆排序(*)
 * 归并排序:归并排序(*)
 * 分配排序:箱排序,基数排序
 */

public class SearchAndSort {
    public static void main(String[] args) {

         int[] arr = {9,7,5,3,1,2,4,6,8};
         System.out.println("数组排序前顺序:");
         for(int n : arr){
             System.out.print(n+" ");
         }

         System.out.println("\n请输入一个数字:");
         @SuppressWarnings("resource")
         Scanner scanner = new Scanner(System.in);
         int num = scanner.nextInt();

         //顺序查找
         System.out.println("顺序查找:");
         int sequenSearch = sequenSearch(arr,num);
         if(sequenSearch != -1){
             System.out.println("查找成功,数字位于数组第"+(sequenSearch+1)+"位!");
         }else{
             System.out.println("查找失败!");
         }

         //排序
         Arrays.sort(arr);
         //bubbleSort(arr);
         //insertSort(arr);
         //selectSort(arr);
         int lower = 0;
         int upper = arr.length-1;
         //quickSort(arr,lower,upper);
         //megeSort(arr,lower,upper);
         //heapSort(arr);

         System.out.println("数组排序后顺序:");
         for(int n : arr){
             System.out.print(n+" ");
         }

         //折半查找
         System.out.println("\n折半查找:");
         int binarySearch = binarySearch(arr,num);
         if(binarySearch != -1){
             System.out.println("查找成功,数字位于数组排序后第"+(binarySearch+1)+"位!");
         }else{
             System.out.println("查找失败!");
         }

    }

    //顺序查找
    private static int sequenSearch(int[] arr, int num) {

        for(int i=0;i<arr.length;i++){
            if(num == arr[i]){
                return i;
            }
        }
        return -1;

    }

    //折半查找
    private static int binarySearch(int[] arr, int num) {

        int lower = 0;
        int upper = arr.length-1;
        while (lower <= upper) {
            int middle = (lower+upper)/2;
            if(arr[middle] < num){
                lower = middle+1;
            }else if(arr[middle] > num){
                upper = middle-1;
            }else{
                return middle;
            }
        }
        return -1;

    }

    //冒泡排序
    private static void bubbleSort(int[] arr) {

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

    }

    //直接插入排序
    private static void insertSort(int[] arr) {

        for(int i=1;i<arr.length;i++){
            int temp = arr[i];
            int j = i-1;
            for(;j>=0 && arr[j]>temp;j--){
                arr[j+1] = arr[j];
            }
            arr[j+1] = temp;
        }

    }

    //简单选择排序
    private static void selectSort(int[] arr) {

        int position = 0;
        for(int i=0;i<arr.length;i++){
            position = i;
            int temp = arr[i];
            for(int j=i+1;j<arr.length;j++){
                if(arr[j] < temp){
                    position = j;
                    temp = arr[j];
                }
            }
            arr[position] = arr[i];
            arr[i] = temp;
        }

    }

    //快速排序
    private static void quickSort(int[] arr, int lower, int upper) {

        if(lower < upper){
            int middle = getMiddle(arr, lower, upper);
            quickSort(arr, lower, middle);
            quickSort(arr, middle+1, upper);
        }

    }

    private static int getMiddle(int[] arr, int lower, int upper) {

        while (lower < upper) {
            while (lower < upper && arr[lower] <= arr[upper]) {
                upper--;
            }
            if(lower < upper){
                int temp = arr[lower];
                arr[lower] = arr[upper];
                arr[upper] = temp;
            }
            while (lower < upper && arr[lower] <= arr[upper]) {
                lower++;
            }
            if(lower < upper){
                int temp = arr[lower];
                arr[lower] = arr[upper];
                arr[upper] = temp;
            }
        }
        return lower;

    }

    //归并排序
    private static void megeSort(int[] arr, int lower, int upper) {

        if(lower < upper){
            int middle = (lower+upper)/2;
            megeSort(arr, lower, middle);
            megeSort(arr, middle+1, upper);
            mege(arr, lower, middle, upper);
        }

    }

    //归并
    private static void mege(int[] arr, int lower, int middle, int upper) {

        int[] tempArr = new int[arr.length];
        int third = lower;
        int mid = middle+1;
        int temp = lower;
        while (lower <= middle && mid <= upper) {
            if(arr[lower] <= arr[mid]){
                tempArr[third++] = arr[lower++];
            }else{
                tempArr[third++] = arr[mid++];
            }
        }
        while (lower <= middle) {
            tempArr[third++] = arr[lower++];
        }
        while (mid <= upper) {
            tempArr[third++] = arr[mid++];
        }
        while (temp <= upper) {
            arr[temp] = tempArr[temp++];
        }

    }

    //堆排序
    private static void heapSort(int[] arr) {

        for(int i=arr.length/2-1;i>=0;i--){
            adjustHeap(arr, i, arr.length);
        }

        for(int j=arr.length-1;j>0;j--){
            int temp = arr[0];
            arr[0] = arr[j];
            arr[j] = temp;
            adjustHeap(arr, 0, j);
        }

    }

    //调整堆
    private static void adjustHeap(int[] arr, int i, int n) {

        int temp = arr[i];
        for(int k=i*2+1;k<n;k=k*2+1){
            if(k+1<n && arr[k] < arr[k+1]){
                k++;
            }
            if(arr[k] > temp){
                arr[i] = arr[k];
                i = k;
            }else{
                break;
            }
        }
        arr[i] = temp;
    }

}

结果显示:

这里写图片描述

猜你喜欢

转载自blog.csdn.net/jsc123581/article/details/81747576