新数据结构(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;
    }

}
相关推荐
dessler2 分钟前
代理服务器-LVS的3种模式与调度算法
运维·服务器·网络·算法·nginx·tomcat·lvs
拼好饭和她皆失6 分钟前
动态规划 熟悉30题 ---上
算法·动态规划
fen_fen37 分钟前
学习笔记(26):线性代数-张量的降维求和,简单示例
笔记·学习·算法
王禄DUT39 分钟前
炉石传说 第八次CCF-CSP计算机软件能力认证
c++·算法
weixin_4196583144 分钟前
数据结构之LinkedList
数据结构
白熊1881 小时前
【推荐算法】DeepFM:特征交叉建模的革命性架构
算法·架构·推荐算法
L_cl1 小时前
【Python 算法零基础 4.排序 ⑪ 十大排序算法总结】
python·算法·排序算法
小刘不想改BUG1 小时前
LeetCode 70 爬楼梯(Java)
java·算法·leetcode
老歌老听老掉牙1 小时前
使用 SymPy 进行向量和矩阵的高级操作
python·线性代数·算法·矩阵·sympy
lifallen2 小时前
Flink checkpoint
java·大数据·算法·flink