• 排序算法--选泡插


    ·

    排序算法–选泡插

    常见排序:

    选择,冒泡,希尔,插入,堆,归并,快速,桶,计数,基数排序

    打油诗–对应平均复杂度和稳定性

    选泡插,

    快归堆希桶计基,

    恩方恩老恩一三,

    对恩加K恩乘K,

    不稳稳稳不稳稳,

    不稳不稳稳稳稳。

    选择排序

    算法思想:多次遍历数组,每次都找到最小的数放到最前面。

    public static void main(String[] args) {
    
            int[] arr = {8,7,6,5,4,3,2,1};
    
            for (int i : arr) {
                System.out.print(i+" ");
            }
    
    
            for (int i = 0; i < arr.length; i++) {
                int minIndex = i;
                for (int j = i+1; j < arr.length; j++) {
                    if(arr[j] < arr[minIndex]){
                        minIndex = j;
                    }
                }
                int min = arr[minIndex];
                arr[minIndex] = arr[i];
                arr[i] = min;
                System.out.print("
    ----------第"+(i+1)+"次遍历后----------
    ");
                for (int i1 : arr) {
                    System.out.print(i1 + " ");
                }
            }
    
            System.out.println("");
    
        }
    

    冒泡排序

    思路:每次遍历将最大的数移到末尾

    public class BubbleSort {
        public static void main(String[] args) {
            int[] arr = {1,4,7,5,6,3,2,8};
            print(arr);
            sort(arr);
        }
        static void sort(int[] a){
            for (int i = a.length-1; i >0; i--) {
                //优化如果某次遍历过程中一次交换也没有发生,就说名已经排好了,这是可以直接跳出循环
                boolean flag = false;
                for (int j = 0; j < i; j++) {
                    if(a[j] > a[j+1]){
                        flag = true;
                        swap(a, j, j+1);
                    }
                }
                System.out.println("第"+(a.length-i)+"排序后:");
                print(a);
                if(!flag) {
                    break;
                }
            }
        }
        static void swap(int[] a, int i, int j){
            a[i] = a[i]+a[j];
            a[j] = a[i]-a[j];
            a[i] = a[i]-a[j];
        }
        static void print(int[] a){
            for (int i : a) {
                System.out.print(i + " ");
            }
            System.out.println("
    ");
        }
    
    
    

    插入排序

    思路:直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列。

    public class InsertSort {
        public static void main(String[] args) {
            int[] arr = {8,4,7,5,6,3,2,1};
            print(arr);
            sort(arr);
        }
    
        static void sort(int[] a){
    
            for (int i = 1; i < a.length; i++) {
                for (int j = i; j > 0; j--) {
                    if(a[j] < a[j-1]){
                        swap(a, j, j-1);
                    }else {
                        break;
                    }
                }
                System.out.println("第"+(i)+"次排序后:");
                print(a);
            }
    
        }
    
        static void swap(int[] a, int i, int j){
            a[i] = a[i]+a[j];
            a[j] = a[i]-a[j];
            a[i] = a[i]-a[j];
        }
    
        static void print(int[] a){
            for (int i : a) {
                System.out.print(i + " ");
            }
            System.out.println("
    ");
        }
    }
    
    

    因为我喜欢追寻过程中的自己
  • 相关阅读:
    1230 jquery
    1221 监听事件
    1218 dom表格元素操作
    1216 DOM
    Java中对小数的向下取整,向上取整
    Mysql中 在SQL语句里进行日期格式转换
    一些常用格式化。价格、日期等 持续更新
    List对象里面根据某一字段去重
    java 后端 初始化图片像素(1980 x 1080)大小
    swagger里面测试List数据格式
  • 原文地址:https://www.cnblogs.com/IzuruKamuku/p/14359761.html
Copyright © 2020-2023  润新知