选择排序-Java「建议收藏」

选择排序-Java「建议收藏」堆排序理论:https://blog.csdn.net/qq_36186690/article/details/82505569代码:packagecom.paixu.paixuTest;importjava.util.Arrays;importjava.util.Scanner;/***选择排序*1)简单选择排序*2)堆排序*/publicclassxuanZhePaiXu{publicstaticvoidmain(String[]a

大家好,又见面了,我是你们的朋友全栈君。

堆排序理论:

https://blog.csdn.net/qq_36186690/article/details/82505569

代码:

package com.paixu.paixuTest;

import java.util.Arrays;
import java.util.Scanner;

/** * 选择排序 * 1)简单选择排序 * 2)堆排序 */
public class xuanZhePaiXu { 
   
    public static void main(String[] args) { 
   
        System.out.println("请输入带排序数,以空格间隔:");
        Scanner scanner = new Scanner(System.in);
        int[] arr = new int[5];
        while (scanner.hasNext()) { 
   
            for (int i = 0; i < arr.length; i++) { 
   
                arr[i] = scanner.nextInt();
            }
            // 1、简单选择排序
            jianDanZuanZhr(arr);

            // 2、堆排序
            duiPaiXu(arr);

        }
    }

    /** * 堆排序 * @param arr * 堆满足两个条件 1)完全二叉树 2)父节点必须大于或者等于子节点,或者是小于等于 * 堆排序的过程: * 1)先将无序的序列构造成大顶堆或者小顶推(升序就构造大顶堆、降序就构造小顶堆) * 2)将堆顶元素与末尾元素交换,将最大元素"沉"到数组末端; * 3)重新调整结构,使其满足堆定义,然后继续交换堆顶元素与当前末尾元素,反复执行调整+交换步骤,直到整个序列有序。 */
    private static void duiPaiXu(int[] arr) { 
   
        // 构造大顶堆 从第一个非叶子节点开始,从下至上,从左往右
        for (int i = arr.length/2-1;i>=0;i--){ 
   
            adjustHeap(arr,i,arr.length);
        }
        // 调整堆结构+交换顶堆元素与末尾元素
        for (int j=arr.length-1;j>0;j--){ 
   
            swap(arr,0,j);  // 交换元素
            adjustHeap(arr,0,j);  // 交换元素后,又重新构造大顶堆
        }
        System.out.println("堆排序:"+Arrays.toString(arr));

    }

    private static void swap(int[] arr, int a, int b) { 
   
        int temp = arr[a];
        arr[a] = arr[b];
        arr[b] = temp;
    }

    /** * 构造大顶推 * @param arr * @param i * @param length * 父亲:(i-1)/2 * 子节点:2i+1 2i+2 */
    private static void adjustHeap(int[] arr, int i, int length) { 
   
        int temp = arr[i];
        for (int k=i*2+1;k<length;k=i*2+1){ 
     //从i结点的左子结点开始,也就是2i+1处开始
            if (k+1<length && arr[k]<arr[k+1]){ 
    //如果左子结点小于右子结点,k指向右子结点
                k++;
            }
            if (arr[k]>temp){ 
     //如果子节点大于父节点,将子节点值赋给父节点(不用进行交换)
                arr[i] = arr[k];  // 子节点的值赋值给了父节点,那么最后原本父节点的值也要给子节点
                i = k;  // 子节点的下标赋值给i,为了最后赋值
            }else { 
   
                break;
            }
        }
        arr[i] = temp;

    }

    /** 简单选择排序 * 每次从后面选择一个最小的与前面设置的最小的交换 * @param arr */
    private static void jianDanZuanZhr(int[] arr) { 
   
        for (int i=0;i<arr.length-1;i++){ 
   
            int min = i;  // 初始化第一个最小
            for (int j=i+1;j<arr.length;j++){ 
   
                if (arr[j]<arr[min]){ 
   
                    min = j;
                }
            }
            if (min!=i){ 
     // 不等,说明有比他小的元素。
                int temp = arr[min];
                arr[min] = arr[i];
                arr[i] = temp;
            }
        }
        System.out.println("简单选择排序:"+Arrays.toString(arr));
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/156958.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java局域网组建与维护题_局域网组建与维护习题(有答案).doc

    java局域网组建与维护题_局域网组建与维护习题(有答案).doc局域网组建与维护实用教程一、填空题计算机网络中常用的三种有线通信介质是双绞线、同轴电缆、光纤。局域网的英文缩写为LAN,城域网的英文缩写为_MAN_,广域网的英文缩写为WAN。计算机网络的功能主要表现在硬件资源共享、软件资源共享、数据资源共享。决定局域网特性的主要技术要素为媒体访问控制方式、拓扑结构、传输介质。计算机网络是现代_计算机_技术与通信技术密切组合的产物。局域网常用的拓扑结构有总…

    2025年7月28日
    2
  • c语言也能写植物大战僵尸吗_植物大战僵尸僵尸写的纸条

    c语言也能写植物大战僵尸吗_植物大战僵尸僵尸写的纸条不少同学都玩过《植物大战僵尸》,最近PopCap公司又带来了新版的消息,这次高兴的轮到Xbox的用户了,日前PopCap公司公布了《植物大战僵尸》XBLA版的截图,这个版本的《植物大战僵尸》引入了多人合作与对抗模式,看图就知道好玩多了又刺激多了。 详见游戏说明,游戏视频于是,我在非常强烈的好奇心和求知欲下,自己动手写了一个简易的双人

    2025年8月11日
    5
  • TP3.2 使用 ajax 写法demo

    TP3.2 使用 ajax 写法demo水平线下面是之前5.21写的。今天(9.10)来补充一下依然是在ThinkPHP3.2框架下index.html页面部分代码:<ahref=”#”class=”aj”>这是ajax</a><scripttype=”text/javascript”src=”__PUBLIC__/js/jquery-2.1.1.min.js”>&…

    2022年9月29日
    3
  • 抖音推荐算法总结[通俗易懂]

    抖音推荐算法究竟如何是做抖音短视频运营的同学非常关心的问题,抖音官方并没有披露正式的算法,但凭借着民间的智慧和官方披露的部分信息中,网友已经总结出抖音推荐算法的秘密。这里整理资料如下:1.发布后的推荐流程第0步:双重审核在抖音,每天有数量庞大的新作品上传,纯靠机器审核容易被钻空子,纯靠人工审核又不太现实。因此,双重审核成为抖音算法筛选视频内容的第一道门槛。机器审核(检测是否违…

    2022年4月11日
    58
  • rj45 千兆接口定义_网线的RJ45接口的针脚定义「建议收藏」

    我们生活中常用的网线接头类型分为两类:用于连接到网络中的终端设备的DTE类型,如连接到PC机的网卡的网线属于DTE型。还有用于网络设备间连接的DCE类型,如路由器连接到交换机的线或交换机连接到交换机的线均属于DCE型。DTE我们称做“数据终端设备”,这里的终端是一个广义的概念,PC也可以是终端(一般广域网常用DTE设备有路由器、终端主机)。DCE我们称做“数据通信设备”,如MODEM,连接DTE设…

    2022年4月10日
    562
  • Android学习十九:ContentProvider初步

    Android学习十九:ContentProvider初步

    2022年1月19日
    42

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号