四大排序算法之选择排序

目录

说明

​编辑

 选择排序

堆排序


说明

为了自己学习方便,我这里总结了四大排序算法涵盖了七种排序算法

分类算法名称时间复杂度      空间复杂度稳定性
插入排序

直接插入排序

希尔排序

O(n^2)   O(1)

O(n^2/3)   O(1)

稳定

不稳定

选择排序

选择排序

堆排序

O(n^2)   O(1)

O(nlogn)  O(1)

不稳定

不稳定

交换排序

冒泡排序

快速排序

O(n^2)   O(1)

全部有序最坏O(n^2)    O(1)

稳定

不稳定

归并排序归并排序O(nlogn)  O(n)稳定

 选择排序

选择排序就是遍历一遍数组,找到最大/最小的元素放在第一个位置,以此类推

public static void changeSort(int[] arr){
        if(arr.length==0 || arr.length==1){
            return;
        }
        for(int i=0;i<arr.length;i++){
            int j=i;
            int min=j;
            //找到最小的元素
            while (j<arr.length){
                min = arr[min] > arr[j] ? j : min;
                j++;
            }
            //交换i位置的元素,与min位置的元素
            swap(i,min,arr);
        }
    }

堆排序

堆排序是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。它是通过堆来进行选择数据。需要注意的是排升序要建大堆,排降序建小堆。

我们使用PriorityQueue来建立一个堆时,默认建立的小堆,如果要建大堆,需要使用比较器

//升序  不用比较器
 PriorityQueue<Integer> priorityQueue=new PriorityQueue<>();
//降序 使用比较器
 PriorityQueue<Integer> p=new PriorityQueue<>((o1,o2)->o2-o1);
堆是一颗完全二叉树,大根堆的父节点大于左右两个子节点,小根堆的父节点小于左右两个子节点
大根堆:arr[i]>=arr[2i+1]&&arr[i]>=arr[2i+2]
小根堆:arr[i]<=arr[2i+1]&&arr[i]<=arr[2i+2]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值