堆排-元素去重-查找问题

news/2024/5/19 4:57:35 标签: java, 堆排序, 排序算法

堆排序与元素去重及查找问题

1、堆排序与元素去重

java">package com.m.sort;


import java.util.Arrays;
import java.util.Random;

public class Test2 {
    public static void main(String[] args) {
        Random random = new Random();
        int[] arr = new int[12];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = random.nextInt(10) + 10;
        }
        System.out.println("原数组:\n" + Arrays.toString(arr));

        sort(arr);

        System.out.println("堆排序后的数组:\n" + Arrays.toString(arr));

        int n = repeatElementInArray(arr);
        int[] newArr = new int[n];
        System.arraycopy(arr, 0, newArr, 0, n);
        /*
        public static void arraycopy(Object src,
                             int srcPos,
                             Object dest,
                             int destPos,
                             int length)
                             参数
                            src - 源数组。
                            srcPos - 源数组中的起始位置。
                            dest - 目标数组。
                            destPos - 目的地数据中的起始位置。
                            length - 要复制的数组元素的数量。
                            
               public class ArrayStoreException 
               extends RuntimeException
               抛出以表示尝试将错误类型的对象存储到对象数组中。 
               例如,以下代码生成一个ArrayStoreException : 
               Object x[] = new String[3];
               x[0] = new Integer(0);
         */
        System.out.println("去重后的数组:\n" + Arrays.toString(newArr));
    }

    /**
     * 数组去重
     *
     * @param arr
     * @return
     */
    public static int repeatElementInArray(int[] arr) {
        int n = arr.length;
        int index = 0;
        if (n < 0) {
            return index;
        }
        index = 1;
        for (int i = 1; i < n; i++) {
            if (arr[i] == arr[i - 1]) {

            } else {
                arr[index] = arr[i];
                index++;
            }
        }
        return index;
    }

    /**
     * 堆排序
     *
     * @param arr
     */
    public static void sort(int[] arr) {
        for (int i = arr.length / 2 - 1; i >= 0; i--) {
            adjust(arr, i, arr.length);
        }
        for (int i = arr.length - 1; i > 0; i--) {
            swap(arr, 0, i);
            adjust(arr, 0, i);
        }
    }

    /**
     * 堆排序调整
     *
     * @param arr
     * @param i
     * @param length
     */
    public static void adjust(int[] arr, int i, int length) {
        int temp = arr[i];
        boolean flag = true;
        for (int j = i * 2 + 1; flag && j < length; j = j * 2 + 1) {
            if (j + 1 < length && arr[j] < arr[j + 1]) {
                j++;
            }
            if (arr[j] > temp) {
                arr[i] = arr[j];
                i = j;
            } else {
                flag = false;
            }
        }
        arr[i] = temp;
    }

    /**
     * 交换数组的a与b的值
     *
     * @param arr
     * @param a
     * @param b
     */
    public static void swap(int[] arr, int a, int b) {
        int t = arr[a];
        arr[a] = arr[b];
        arr[b] = t;
    }
}
ICU(综合性重症监护病房)CCU(冠心病重症监护室)两者的区别在于:一个是各类重症都可进入,一个是只冠心病重症。

ICU是英文Intensive Care Unit的缩写,意为重症加强护理病房。重症医学监护是随着医疗护理专业的发展、新型医疗设备的诞生和医院管理体制的改进而出现的一种集现代化医疗护理技术为一体的医疗组织管理形式。中小医院是一个病房,大医院是一个特别科室,把危重病人集中起来,在人力、物力和技术上给予最佳保障,以期得到良好的救治效果。

2、查找问题

java">package com.m.sort;


import java.util.Scanner;

//查找问题
public class Test2 {
    //    顺序查找法
    //    ⼆分查找法,前提是所查找的数组必须是有序的
    public static void main(String[] args) {
        test1();
    }

    //  顺序查找法
    public static void test() {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入一个数:");
        int n = scanner.nextInt();
        System.out.println((isExist(n) ? "存在" : "不存在"));
    }

    public static boolean isExist(int num) {
        boolean flag = false;
        int[] arr = {5, 4, 3, 2, 8};
        for (int i = 0; i < arr.length; i++) {
            if (num == arr[i]) {
                flag = true;
                break;
            }
        }
        return flag;
    }

    //  ⼆分查找法
    public static void test1() {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入一个数:");
        int n = scanner.nextInt();
        System.out.println((isExistByHalf(n) ? "存在" : "不存在"));
    }

    public static boolean isExistByHalf(int num) {
        boolean flag = false;
        int[] arr = {12, 5, 4, 3, 2, 1, -5};
        int low = 0;
        int high = arr.length - 1;
        while (low <= high) {
            int mid = (low + high) >>> 1;
            if (num < arr[mid]) {
                low = mid + 1;
            } else if (num > arr[mid]) {
                high = mid - 1;
            } else {
                flag = true;
                break;
            }
        }
        return flag;
    }
}

http://www.niftyadmin.cn/n/1846971.html

相关文章

线程死锁_hashMap参数

多线程 1、模拟一个线程死锁 package com.m.sort;public class Test2 {private static final Object obj1 new Object();private static final Object obj2 new Object();public static void main(String[] args) {new Thread(()->{synchronized (obj1){try {Thread.sle…

进制转换_负数的补码

补码: 假设当前时针指向8点&#xff0c;而准确时间是6点&#xff0c;调整时间可有以下两种拨法&#xff1a;一种是倒拨2小时&#xff0c; 即8-26&#xff1b;另一种是顺拨10小时&#xff0c;8101266&#xff0c;即8-2810812-2(mod 12)&#xff0e;在12为模的系统里&#xff0c;…

时间定律与学习规律

时间定律与学习规律 时间定律 package com.m;import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.util.Calendar; import java.util.Date;public class Test {//1000小时&#xff0c;定律;//每天8小时&#xff0c;需要125天。//每个月30天,需要…

pta甲级 1127 ZigZagging on a Tree (30分)

链接&#xff1a;https://pintia.cn/problem-sets/994805342720868352/problems/994805349394006016 题意&#xff1a;给出n个点的二叉树的中序遍历序列和后序遍历序列。按“Z”型输出层序遍历序列。 思路&#xff1a;直接大模拟&#xff0c;建树硬怼。详情看注释。 #includ…

插入排序与数组查重

插入排序与数组查重 //插入排序public static void main(String[] args) {Random random new Random();int [] arr new int[12];for (int i 0; i < arr.length; i) {arr[i] random.nextInt(12)8;}System.out.println(Arrays.toString(arr));chaSort(arr);System.out.pri…

pta 甲级1119 Pre- and Post-order Traversals (30分)

链接&#xff1a;https://pintia.cn/problem-sets/994805342720868352/problems/994805353470869504 题意&#xff1a;给出二叉树的前序、后序遍历序列&#xff0c;能否唯一确定一棵树&#xff1f;输出中序遍历序列。 思路&#xff1a;能否确定一棵树关键在于是否有只有一个孩…

用生命在作

人口净流入 12 12 1 底层逻辑&#xff0c;爆款?刷屏? 人性(喜&#xff0c;怒&#xff0c;忧&#xff0c;思&#xff0c;悲&#xff0c;恐&#xff0c;惊)怒比喜更容易传播 1、学会这4招&#xff0c;让你快速升职加薪。 2、裁员潮&#xff1a;这4招不会&#xff0c;下一个…

pta甲级 1105 Spiral Matrix (25分)

链接&#xff1a;https://pintia.cn/problem-sets/994805342720868352/problems/994805363117768704 题意&#xff1a;给你N个数&#xff0c;将其放入非递增的螺旋矩阵中&#xff0c;矩阵大小为m*n,要求&#xff1a; 1&#xff09;N m * n 2) m > n 3) m-n最小 思路&a…