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

}
相关推荐
灵感__idea3 小时前
Hello 算法:贪心的世界
前端·javascript·算法
澈2075 小时前
深入浅出C++滑动窗口算法:原理、实现与实战应用详解
数据结构·c++·算法
ambition202425 小时前
从暴力搜索到理论最优:一道任务调度问题的完整算法演进历程
c语言·数据结构·c++·算法·贪心算法·深度优先
cmpxr_5 小时前
【C】原码和补码以及环形坐标取模算法
c语言·开发语言·算法
qiqsevenqiqiqiqi5 小时前
前缀和差分
算法·图论
代码旅人ing5 小时前
链表算法刷题指南
数据结构·算法·链表
Yungoal5 小时前
常见 时间复杂度计算
c++·算法
不爱吃炸鸡柳6 小时前
单链表专题(完整代码版)
数据结构·算法·链表
CylMK7 小时前
题解:AT_abc382_d [ABC382D] Keep Distance
算法
Dfreedom.7 小时前
计算机视觉全景图
人工智能·算法·计算机视觉·图像算法