排序算法总结

本文总结了十大排序算法,包括稳定排序如插入排序、冒泡排序和归并排序,以及不稳定排序如选择排序、快速排序和堆排序。介绍了每种排序算法的基本思想,如快速排序的分区操作,归并排序的分治策略,以及堆排序的维护大顶堆过程。此外,还提到了非原地排序的归并排序和适用于特定情况的计数排序、基数排序和桶排序。
摘要由CSDN通过智能技术生成

排序算法总结(网上图片,忘记出处了,侵权删)
稳定排序:相同值元素排序之后前后相对顺序不变
1、不稳定排序:选择排序,希尔排序,快速排序,堆排序 快选希堆
2、稳定排序:插入排序,冒泡排序,归并排序,计数排序 插冒归计

原地排序:直接在原数组上进行,不申请额外数组空间
非原地排序:归并排序

十大排序算法

1、选插冒 O(n*n)

(1) 选择排序:(有序区,无序区); 在无序区中选择最小元素与无序区首元素交换; 无序区最小元素归位; 不稳定、原地排序

(2) 冒泡排序:(无序区,有序区); 相邻元素两两比较,将大元素后移 无序区最大元素归位; 稳定、原地排序

(3) 插入排序:(有序区,无序区); 无序区首元素,在有序段中查找位置并插入; 无序区首元素归位; 稳定、原地排序

2、 快归希堆 O(n*log(n))

(1) 快速排序:区间首元素作为基准元素,<=放到其左边,>=放到其右边 基准元素归位,再分别调整左/右子区间; 非稳定排序 ; (代码注意:二重while循环中都取到等号;最后交换l与y位置的元素)

(2) 归并排序: 划分为两个子区间,分别排序再将排序结果合并; 左右子数组比较; 稳定、非原地排序

(3) 希尔排序: 不断缩小间距gap/2,每次都是插入排序(快速插入:通过间距来减少移动次数) ; 非稳定、原地排序

(4) 堆排序: 维护大顶堆 首先[n/2-1,…,0]调整构建一个大顶堆,然后每次将堆顶元素归位并调整大顶堆; 堆顶元素归位; 非稳定、原地排序

3、其他排序

(1) 计数排序: 最大/最小值相差不大, 统计各元素出现频次,然后从小到大整合

(2) 基数排序:按照个位、十位、百位…分别进行排序 (桶大小为10)

(3) 桶排序: 计算最大值与最小值,根据差分成多个桶/区间,将所有元素放入桶中 每个小桶排序后再按顺序整合到一起

    // 选择排序		“有序段|无序段”    每次将无序段最小元素归位
    public static void ChooseSort(int[] nums){
        for(int i=0;i<nums.length;i++){
            int tmp=nums[i],k=i;
            for(int j=i+1;j<nums.length;j++){
                if(nums[j]<tmp){
                    tmp&#
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值