新数据结构(1)冒泡排序和堆排序

冒泡排序

前后两两对比进行交换,每轮至少一个数组变得有序(未排序的最大数值找到正确位置)

代码:

java 复制代码
package Test20250206;

public class BubbleSort {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[] arr= {2,3,9,4,5,7,0,1};
        sort(arr);
        for(int i=0;i<arr.length;i++) {
            System.out.print(arr[i]+",");
        }
    }
    static void sort(int[] arr) {
        for(int j=0;j<arr.length-1;j++) {
            for(int i=0;i<arr.length-1;i++) {
                if(arr[i]>arr[i+1]) {
                    int temp=arr[i];
                    arr[i]=arr[i+1];
                    arr[i+1]=temp;
                }
            }
        }
    }

}

堆排序

流程(从根到叶):

事实上在数组里操作,没有构建二叉树

父子节点之间的规律:

代码:

java 复制代码
package Test20250206;

import java.util.Arrays;

public class HeapSort {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[] arr= {2,3,9,4,5,7,1,0};
        for(int p=arr.length-1;p>=0;p--) {
            sort(arr,p,arr.length);
        }
        for(int i=arr.length-1;i>0;i--) {
            int temp=arr[i];
            arr[i]=arr[0];
            arr[0]=temp;//堆顶元素和堆底元素进行互换
            sort(arr,0,i);
        }
        System.out.print(Arrays.toString(arr));
    }
    public static void sort(int[] arr,int parent,int le) {
        int temp=arr[parent];//temp作为父节点
        int lChild=2*parent+1;//左孩子
        while(lChild<le) {
            int rChild=lChild+1;//右孩子
            if(rChild<le&&arr[lChild]<arr[rChild]) {
                lChild++;//右孩子大于左孩子则把左孩子替换为右孩子
            }
            if(temp>=arr[lChild]) {
                break;//父节点值大于孩子节点则直接结束
            }
            arr[parent]=arr[lChild];//把孩子节点的值赋给父节点
            parent=lChild;
            lChild=2*lChild+1;
        }
        arr[parent]=temp;
    }

}
相关推荐
?abc!24 分钟前
缓存(5):常见 缓存数据淘汰算法/缓存清空策略
java·算法·缓存
BioRunYiXue26 分钟前
一文了解氨基酸的分类、代谢和应用
人工智能·深度学习·算法·机器学习·分类·数据挖掘·代谢组学
jiunian_cn1 小时前
【c++】异常详解
java·开发语言·数据结构·c++·算法·visual studio
工藤新一¹3 小时前
蓝桥杯算法题 -蛇形矩阵(方向向量)
c++·算法·矩阵·蓝桥杯·方向向量
Levin__NLP_CV_AIGC3 小时前
解决pip安装PyPI默认源速度慢
算法·pip
康康这名还挺多3 小时前
鸿蒙HarmonyOS list优化一: list 结合 lazyforeach用法
数据结构·list·harmonyos·lazyforeach
Helibo443 小时前
GESPC++六级复习
java·数据结构·算法
EnticE1524 小时前
[高阶数据结构]二叉树经典面试题
数据结构·算法·面试
MarkHard1234 小时前
Leetcode (力扣)做题记录 hot100(34,215,912,121)
算法·leetcode·职场和发展
_星辰大海乀5 小时前
数据库约束
java·数据结构·数据库·sql·链表