四大排序算法之选择排序

目录

说明

​编辑

 选择排序

堆排序


说明

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

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

直接插入排序

希尔排序

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) 稳定

四大排序算法之选择排序_第1张图片

 选择排序

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

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

堆排序

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

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

//升序  不用比较器
 PriorityQueue priorityQueue=new PriorityQueue<>();
//降序 使用比较器
 PriorityQueue 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]

你可能感兴趣的:(笔记,排序算法,算法,java)