22.1.8 堆排序、桶排序

22.1.8 堆排序、桶排序

1. 堆排序:时间复杂度:O(nlogn), 空间复杂度:O(1)

(1)完全二叉树:
  • 第i个节点的左孩子:2*i+1;
  • 第i个节点的右孩子:2*i+2;
  • 第i个节点的父节点:(i-1)/2;
(2)大根堆:以节点i为根节点的子树中,节点i上的值是这棵子树中最大的。
(3)小根堆:以节点i为根节点的子树中,节点i上的值是这棵子树中最小的。
(4)code:
public static void main(String[] args)    {        int[] arr = {2,5,3,6,2,1,9,7,8};        heapSoft(arr);        for(int cur:arr)            System.out.print(cur+" ");    }        public static void swap(int[] arr, int i, int j)     {        int tmp = arr[i];        arr[i] = arr[j];        arr[j] = tmp;    }        public static void heapSoft(int[] arr)    {                if(arr == null || arr.length<2)            return;        int heapsize = arr.length;

(2)堆注意事项:

  • 用系统提供的小根堆(例如,PriorityQueue

(3)比较器

  • 相当于c++中的比较运算符重载,可以实现两个类实例化的变量之间的比较。可以配合java中Array.sort(待排序的数组,排序方式)一起使用。
  • 返回值标准: 返回值为负数,第一个参数排在前面; 返回值为正数,第二个参数排在前面; 返回值为0;谁在前面无所谓。
  • code:
import java.lang.*;import java.util.Arrays;import java.util.Comparator ;
  • 运行结果:

Name : C, Id : 1, Age : 22 Name : A, Id : 2, Age : 23 Name : B, Id : 3, Age : 21

(4)桶排序

  • 1)桶排序思想下的排序都是不基于比较的排序
  • 2)时间复杂度为O(N),额外空间负载度O(M)
  • 3)应用范围有限,需要样本的数据状况满足桶的划分
  • code:

undefined

Original: https://www.cnblogs.com/txzmy/p/15779618.html
Author: 张满月。
Title: 22.1.8 堆排序、桶排序

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/607597/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球