排序算法(冒泡排序、选择排序、插入排序、快速排序)、二分法查找

冒泡排序

算法思路: 数组元素两两进行比较,将大数往后放,经过一轮后最大的元素会出现在最后如此往复,整个数组就有序了。
原理图:
在这里插入图片描述
代码实现:

public class Demo {
    
    
    public static void main(String[] args) {
    
    
        //冒泡排序
        int[] arr={
    
    10,2,43,32,12,53,98,-10,34,41};
        for (int j = 0; j < arr.length - 1;j++) {
    
    //外循环实现循环的轮数
            for (int i = 0; i < arr.length - 1-j; i++) {
    
    //内循环实现一轮的循环
                if(arr[i]>=arr[i+1]){
    
    
                    int t =arr[i];
                    arr[i]=arr[i+1];
                    arr[i+1]=t;
                }
            }
        }
    }
 }

选择排序

**算法思路:**每次拿一个元素和后边所有的元素挨个比较,小的数往前放,经过一轮比较,最小的元素会出现在最前面,如此往复,这个数组就有序了。
原理图:
在这里插入图片描述

代码实现:

public class Demo2 {
    
    

    public static void main(String[] args) {
    
    
        //选择排序
        int[] arr={
    
    10,9,4,19,23,67,34,82,-19,-34,66};

        for (int index = 0; index < arr.length-1; index++) {
    
    //实现轮数
            for (int i = 1+index; i < arr.length; i++) {
    
    //实现美每轮的循环
                if(arr[index]>=arr[i]){
    
    
                    int t=arr[index];
                    arr[index]=arr[i];
                    arr[i]=t;
                }
            }
        }
        System.out.println(Arrays.toString(arr));
   }
}

插入排序

算法思路: 将一个记录插入到一个长度为m 的有序表中,使之仍保持有序,从而得到一个新的长度为m+1的有序列表.假设有一组元素{k1,k2…,kn},排序开始就认为k1是一个有序序列,让k2插入上述表长为1的有序序列,使之成为一个表长为2的有序序列,然后让k3插入上述表长为2的有序序列,使之成为一个表长为3的有序序列,以此类推,最后让kn插入表长为n-1的有序序列,得到一个表长为n的有序序列.

原理图:

在这里插入图片描述

代码实现:

public class Demo3 {
    
    
    public static void main(String[] args) {
    
    
        //插入排序
        int[] arr={
    
    10,9,4,19,23,67,34,82,-19,-34,66};

        for (int i = 1; i < arr.length; i++) {
    
    
            for(int j=0;j<i;j++){
    
    
                if(arr[j]>arr[i]){
    
    
                    int t=arr[j];
                    arr[j]=arr[i];
                    arr[i]=t;
                }
            }
        }
        System.out.println(Arrays.toString(arr));
    }
}

快速排序

算法思路:
挖坑填数

  1. 将基准数挖出形成第一个坑。
  2. 由后向前找比他小的数,找到后挖出此数填到前一个坑中。
  3. 由前向后找比他大或等于的数,找到后也挖出此数填到前一个坑中。
    再重复执行2,3两步骤

原理图:
在这里插入图片描述

public class QuickSortName {
    
    
    public static void quicksort(int[] arr, int start, int end) {
    
    
        if (start < end) {
    
    
            int index = getIndex(arr, start, end);
            //在左半部分实现
            quicksort(arr, start, index - 1);

            //右半部份实现
            quicksort(arr, index + 1, end);
        }

    }

    private static int getIndex(int[] arr, int start, int end) {
    
    
        int i = start;
        int j = end;
        int t = arr[i];
        while (i < j) {
    
    
            while (i < j && arr[j] > t) {
    
    
                j--;
            }
            if (i < j) {
    
    
                arr[i] = arr[j];
                i++;
            }
            while (i < j && arr[i] < t) {
    
    
                i++;
            }
            if (i < j) {
    
    
                arr[j] = arr[i];
                j--;
            }
        }
        arr[i] = t;


        return i;

    }
}
public class MyTest {
    
    
    public static void main(String[] args) {
    
    
        int[] arr = {
    
    10, 9, 4, 80, 97, 104, 37, -100, 76};
        QuickSortName.quicksort(arr, 0, arr.length - 1);
        System.out.println(Arrays.toString(arr));

    }
}


二分法查找

算法思路: 每一次查找中间元素,比较大或者小就能缩小一般元素

原理图:
在这里插入图片描述

扫描二维码关注公众号,回复: 11922197 查看本文章

代码实现:

public class Demo {
    
    
    public static void main(String[] args) {
    
    
        //二分发查根据元素查索引
        int[] arr = {
    
    10, 9, 4, 80, 97, 104, 37, -100, 76};
        QuickSortName.quicksort(arr, 0, arr.length - 1);
        System.out.println(Arrays.toString(arr));
        int index = getIndex(arr, 111111);
        System.out.println("索引是:"+index);

    }

    private static int getIndex(int[] arr, int i) {
    
    

        int minindex = 0;
        int maxindex = arr.length - 1;
        int midindex = (minindex + maxindex) / 2;
        while (minindex < maxindex) {
    
    
            if (i == arr[midindex]) {
    
    
                return midindex;
            } else if (i > arr[midindex]) {
    
    
                minindex = midindex + 1;
            } else if (i < arr[midindex]) {
    
    
                maxindex = midindex - 1;
            }
            midindex=(minindex+maxindex)/2;
        }
        return -1;


    }
}

猜你喜欢

转载自blog.csdn.net/weixin_42093672/article/details/102828290