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

}
相关推荐
CS创新实验室28 分钟前
数据结构:栈的应用举例——进制转换
数据结构·计算机考研·408考研
奋进的小暄1 小时前
贪心算法(7)(java) 分发饼干
数据结构·算法·贪心算法
大模型铲屎官1 小时前
从零精通机器学习:线性回归入门
开发语言·人工智能·python·算法·机器学习·回归·线性回归
试剂界的爱马仕1 小时前
投资早报 3.14
人工智能·深度学习·算法·机器学习·区块链·ai写作
ksbglllllll2 小时前
ccf3401矩阵重塑(其一)
c++·算法·矩阵
siy23332 小时前
[c语言日寄]浮点数的排序
c语言·开发语言·数据结构·笔记·学习
king-xxz2 小时前
力扣No.673.最长递增子序列的个数
数据结构·算法·leetcode
飞奔的马里奥2 小时前
力扣Hot100——169. 多数元素
java·算法·leetcode
一只_程序媛2 小时前
【leetcode hot 100 105】从前序与中序遍历序列构造二叉树
算法·leetcode·职场和发展
我也爱吃馄饨2 小时前
leetcode105为什么可以root.left可以截取到前序遍历二叉树的(0,index),而不是(1,index+1)
数据结构