数据结构和算法——排序算法

目录

排序的分类:

内部排序:

插入排序:

直接插入排序:

希尔排序:

选择排序:

简单选择排序:

堆排序:

交换排序:

冒泡排序:

快速排序

归并排序:

基数排序:

外部排序:


时间复杂度和空间复杂度:

时间频度:语句执行的次数。

java 复制代码
    int total = 0;
    int end = 100;
    for (int i = 1; i < end; i++) {
        total += i;
    }

写法:T(n)=n+1;语句执行了n+1次,因为最后判断一次使他退出,所以+1次。

当n值变大可以忽略:忽略常数项。忽略低次项。

排序的分类:

内部排序:
插入排序:
直接插入排序:
希尔排序:
选择排序:
简单选择排序:

代码:

java 复制代码
public class SelectSort {
    public static void main(String[] args) {
        int[] arr = new int[80000];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = (int) (Math.random() * 80000);
        }
        long startTime = System.currentTimeMillis();
        selectSort(arr);
        long endTime = System.currentTimeMillis() - startTime;
    }

    public static void selectSort(int[] arr) {
        for (int i = 0; i < arr.length - 1; i++) {
            int minIndex = i;
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[j] < arr[minIndex]) {
                    minIndex = j;
                }
            }
            if (minIndex != i) {
                int tmpNum = arr[i];
                arr[i] = arr[minIndex];
                arr[minIndex] = tmpNum;
            }
        }
    }
}
堆排序:

在二叉树的基础上。

交换排序:
冒泡排序:

代码:

java 复制代码
public class BubbleSort {
    public static void main(String[] args) {
        int[] arr = new int[80000];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = (int) (Math.random() * 80000);
        }
        long startTime = System.currentTimeMillis();
        bubbleSort(arr);
        long endTime = System.currentTimeMillis() - startTime;
    }

    public static void bubbleSort(int[] nums) {
        for (int i = 0; i < nums.length - 1; i++) {
            boolean sortEd = true; // 已顺序排序
            for (int j = 0; j < nums.length - 1 - i; j++) {
                if (nums[j] > nums[j + 1]) {
                    int tmp = nums[j];
                    nums[j] = nums[j + 1];
                    nums[j + 1] = tmp;
                    sortEd = false;
                }
            }
            if (sortEd) {
                return;
            }
        }
    }
}
快速排序
归并排序:
基数排序:

是桶排序的升级版。

外部排序:

当数据量太大,无法全部加载到内存总时,需要借助外部存储进行排序。

相关推荐
2501_9219608523 分钟前
双相自指图与弦论边界非对易性的结构同源
数据结构
王老师青少年编程26 分钟前
csp信奥赛C++高频考点专项训练之贪心算法 --【线性扫描贪心】:均分纸牌
c++·算法·编程·贪心·csp·信奥赛·均分纸牌
EQUINOX127 分钟前
2026年码蹄杯 本科院校赛道&青少年挑战赛道提高组初赛(省赛)第一场,个人题解
算法
萝卜小白29 分钟前
算法实习Day04-MinerU2.5-pro
人工智能·算法·机器学习
Liangwei Lin36 分钟前
洛谷 P3133 [USACO16JAN] Radio Contact G
数据结构·算法
一 乐1 小时前
医院挂号|基于springboot + vue医院挂号管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·医院挂号管理系统
weixin_513449961 小时前
PCA、SVD 、 ICP 、kd-tree算法的简单整理总结
c++·人工智能·学习·算法·机器人
code_pgf1 小时前
Qwen2.5-VL 算法解析
人工智能·深度学习·算法·transformer
鱼鳞_1 小时前
Java学习笔记_Day29(异常)
java·笔记·学习
烟锁池塘柳01 小时前
一文讲透 C++ / Java 中方法重载(Overload)与方法重写(Override)在调用时机等方面的区别
java·c++·面向对象