day01——数据结构与算法

65 阅读1分钟

选择排序

算法思想:每一趟从待排序的元素中选择最小(或最大)的一个元素作为首元素,直到所有元素排完为止。
算法图解
image.png
代码实现:

public static  void selectSort(int[] arr){
       //判断数组是否为空或者数组长度是否只有一个元素
    if(arr == null || arr.length < 2){
        return;
    }
    //数组长度
    int N = arr.length;
    
    for (int i = 0; i < N; i++) {//控制趟数
        int min = i;
        for (int j = i+1; j < N; j++) {//得到每一趟的最小元素
            min = arr[j] < arr[min] ? j :min;
        }
        swap(arr,i,min);
    }
}
//交换函数swap
public  static void swap(int[] arr,int i ,int j){
    int tmp = arr[j];
    arr[j] = arr[i];
    arr[i] = tmp;
}

冒泡排序

算法思想:对相邻的元素进行两两比较,如果发生逆序,则进行交换,这样,每趟会将最小(或最大)的元素"浮"到顶端,最终达到完全有序。
算法图解
image.png
代码实现

public static void bubbleSort(int[] arr){
    //判断数组是否为空或者数组长度是否只有一个元素
    if(arr == null || arr.length < 2){
        return;
    }
    for (int end = arr.length-1; end >0 ; end--) {//控制趟数
        for (int i = 0; i < end; i++) {//相邻两个元素是否发生逆序,如果发生则交换
            if(arr[i]>arr[i+1]){
                swap(arr,i,i+1);
            }
        }
    }
}
//交换函数swap
public  static void swap(int[] arr,int i ,int j){
    int tmp = arr[j];
    arr[j] = arr[i];
    arr[i] = tmp;
}

插入排序

算法思想:将一个元素插入到已经排好的有序表中,从而得到一个新的、元素数量+1的有序表。
算法图解
image.png
代码实现

public static void insertionSort(int[] arr){
    if(arr == null || arr.length < 2){
        return;
    }
    for (int i = 1; i <arr.length ; i++) {//0~i做到有序
        for (int j = i-1; j >= 0 && arr[j] > arr[j+1] ; j--) {
            swap(arr,j,j+1);
        }

    }
}
//交换函数swap
public  static void swap(int[] arr,int i ,int j){
    int tmp = arr[j];
    arr[j] = arr[i];
    arr[i] = tmp;
}