美文网首页
2020-04-30-排序算法

2020-04-30-排序算法

作者: 耿望 | 来源:发表于2020-05-06 09:36 被阅读0次

冒泡排序

    public void sort(List<Integer> list) {
        // 平均时间复杂度O(n^2)
        for (int i = 0; i < list.size(); i++) {
            // 每次从第一个数开始遍历
            for (int j = 0; j < list.size() - i - 1; j++) {
                // 每一轮排序后,最后一个数字最大
                if (list.get(j) > list.get(j + 1)) {
                    int temp = list.get(j);
                    list.set(j, list.get(j + 1));
                    list.set(j + 1, temp);
                    count++;
                }
            }
        }
        System.out.println("Bubble sort count=" + count);
    }

直接选择排序

    public void sort(List<Integer> list) {
        // 平均时间复杂度O(n^2)
        for (int i = 0; i < list.size() - 1; i++) {
            // 每次从第(i+1)个数开始遍历
            for (int j = i + 1; j < list.size(); j++) {
                // 每一轮排序后第一个数最小
                if (list.get(i) > list.get(j)) {
                    int temp = list.get(i);
                    list.set(i, list.get(j));
                    list.set(j, temp);
                    count++;
                }
            }
        }
        System.out.println("Select sort count=" + count);
    }

插入排序

    public void sort(List<Integer> list) {
        // 平均时间复杂度O(n^2),从第二个数开始遍历
        for (int i = 1; i < list.size(); i++) {
            // 如果后面的数比前面大
            if (list.get(i - 1) > list.get(i)) {
                int temp = list.get(i);
                int j = i;
                // 则往前寻找比它大的数,插入到这个数前面
                while (j > 0 && list.get(j - 1) > temp) {
                    list.set(j, list.get(j - 1));
                    j--;
                    count++;
                }
                list.set(j, temp);
            }
        }
        System.out.println("Insert sort count=" + count);
    }

快速排序

    public void sort(List<Integer> list, int head, int tail) {
        // 如果头部大于等于尾部,结束递归,完成排序
        if (head >= tail) {
            return;
        }
        // 通过一个key值将数组分成两拨,key前面的数都比key小,key后面的数都比key大
        // 时间复杂度缩短为O(n log_n);
        int key = list.get(head);
        int tHead = head;
        int tTail = tail;
        while (tHead < tTail) {
            // 从后往前遍历,直到找到比key小的数,将它设为新的key
            while (tHead < tTail && list.get(tTail) >= key) {
                tTail--;
            }
            // 从前往后遍历,直到找到比key大的数,将它设为新的key
            list.set(tHead, list.get(tTail));
            while (tHead < tTail && list.get(tHead) <= key) {
                tHead++;
            }
            list.set(tTail, list.get(tHead));
        }
        list.set(tHead, key);
        count++;
        sort(list, head, tHead - 1);
        sort(list, tTail + 1, tail);
    }

参考

算法学习笔记17-经典排序算法
八大排序算法稳定性分析

相关文章

  • 2020-04-30-排序算法

    冒泡排序 直接选择排序 插入排序 快速排序 参考 算法学习笔记17-经典排序算法八大排序算法稳定性分析

  • java实现快速排序、归并排序、希尔排序、基数排序算法...

    快速排序算法 归并排序算法 希尔排序算法 基数排序算法

  • web开发需要知道的几个算法

    算法分类 快速排序算法 深度优先算法 广度优先算法 堆排序算法 归并排序算法

  • 算法学习(1)-排序算法

    八大排序算法九大排序算法再总结[经典排序算法][集锦][直观学习排序算法] 视觉直观感受若干常用排序算法 快速排序...

  • 经典排序算法总结

    经典排序算法集锦 冒泡法 排序算法入门之冒泡排序 排序算法入门之冒泡排序优化

  • 前端算法学习-第一篇

    冒泡排序算法 冒泡排序算法是最慢的排序算法之一,也是最容易实现的排序算法。之所以叫冒泡排序是因为使用这种算法排序时...

  • 七大排序算法之冒泡排序

    七大排序算法之冒泡排序 @(算法笔记)[排序算法, 冒泡排序, C++实现] 冒泡排序介绍 冒泡排序是七大排序算法...

  • 算法-选择排序

    算 法:选择排序算法时间复杂度: 选择排序算法概述 选择排序伪代码 选择排序实现 选择排序算法概述 排序算法有许...

  • 浅谈排序算法

    排序算法有很多种,今天先谈谈一些简单的排序算法。包括桶排序、冒泡排序和快速排序算法。后期总结各种排序算法。 桶排序...

  • 线性排序

    桶排序、计数排序、基数排序 一、线性排序算法介绍 1.线性排序算法包括桶排序、计数排序、基数排序。2.线性排序算法...

网友评论

      本文标题:2020-04-30-排序算法

      本文链接:https://www.haomeiwen.com/subject/wztzwhtx.html