`
xlover
  • 浏览: 244992 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

二分实现插排

阅读更多
[/color][color=darkred][size=medium][/size]转载
最近在研究Java数据结构和算法

练习写了一个用插入排序的算法

查找部分使用二分查找实现的

和大家分享一下 呵呵

还请各位大牛多指教啊

呵呵

Java代码 
import java.util.Random; 
 
public class InsertSort { 
    /**
     * 插入排序算法实现
     * @author Jason
     * @param arr
     * @return
     */ 
    public static int[] insertSort(int[] arr) { 
        int searchCount = 0; 
        for (int out = 1; out < arr.length; out++) { 
            outPrint(arr); 
            if (arr[out]>arr[out-1]) { 
                continue; 
            } 
            //普通查找算法 
            /*for (int inn = 0; inn < out; inn++) {
                searchCount++;
                if (arr[out]<arr[inn]) {
                    move(arr,out,inn);
                    break;
                }else {
                    continue;
                }
            }*/ 
            //使用二分查找算法找到要插入的位置 
            int start = 0; 
            int end = out - 1; 
            while (start <= end) { 
                searchCount++; 
                int searchIndex = (start + end) / 2; 
                if (arr[out] > arr[searchIndex]) { 
                    start = searchIndex + 1; 
                } else if (arr[out] < arr[searchIndex]) { 
                    if (searchIndex == 0 
                            || (searchIndex != 0 && arr[out] > arr[searchIndex - 1])) { 
                        move(arr, out, searchIndex); 
                        break; 
                    } else { 
                        end = searchIndex - 1; 
                        continue; 
                    } 
                } else { 
                    move(arr, out, searchIndex); 
                    break; 
                } 
            } 
        } 
        check(arr); 
        System.out.println("Search Count:" + searchCount); 
        return arr; 
    } 
    /**
     * 移动数据
     */ 
    private static void move(int[] arr, int out, int inn) { 
        int changeTemp = arr[out]; 
        for (int i = out; i > inn; i--) { 
            arr[i] = arr[i - 1]; 
        } 
        arr[inn] = changeTemp; 
    } 
    /**
     * 输出
     */ 
    private static void outPrint(int[] arr) { 
        System.out.println(); 
        for (int i = 0; i < arr.length; i++) { 
            System.out.print(arr[i] + "|"); 
        } 
    } 
    /**
     * 结果检查
     */ 
    private static boolean check(int[] arr) { 
        System.out.println(); 
        for (int i = 1; i < arr.length; i++) { 
            if (arr[i] < arr[i - 1]) { 
                System.out.println("Sort Error!"); 
                return false; 
            } 
        } 
        System.out.println("Sort Success!"); 
        return true; 
    } 
    /**
     * 测试方法
     * @param args
     */ 
    public static void main(String[] args) { 
        // TODO Auto-generated method stub 
        Random ran = new Random(); 
        int[] arr = new int[60]; 
        for (int i = 0; i < arr.length; i++) { 
            arr[i]=ran.nextInt(300000); 
        } 
        System.out.println("Befor sort:"); 
        for (int i = 0; i < arr.length; i++) { 
            System.out.print(arr[i]+"|"); 
        } 
        arr = InsertSort.insertSort(arr); 
        System.out.println("After sort:"); 
        for (int i = 0; i < arr.length; i++) { 
            System.out.print(arr[i]+"|"); 
        } 
         
    } 
分享到:
评论

相关推荐

    斐讯DC1 插排固件,2020.03.11

    斐讯DC1 插排固件

    智能逆变插排报告(初稿)

    ### 智能逆变插排关键技术...总之,智能逆变插排作为新兴的电力管理工具,集成了先进的逆变技术和智能化功能,正逐步成为现代社会电力供应系统的重要组成部分,为实现高效、智能、可持续的能源管理提供了新的解决方案。

    智能插排.zip

    基于STM32的智能插排设计,设定好时间后每天定时开关插座。本人用在控制水草缸中的 灯、CO2、风冷。该产品可同时控制4路,停电时通过RTC时钟确保时间准确以及纽扣电池供电。压缩包里面包含源码,PCB,下载即能用。...

    基于机智云智能插排

    二、智能插排的功能特性 1. 远程控制:通过连接WiFi,用户可以随时随地通过手机APP控制智能插排的开关,实现家电远程操作。 2. 定时任务:设定定时开关,如早晨自动开启咖啡机,晚上自动关闭灯光,提高生活便利性。...

    基于单片机的智能插排设计.pdf

    以上是对“基于单片机的智能插排设计”的知识点的总结,设计者不仅考虑了硬件的选型和功能实现,还兼顾了软件的程序设计,确保了系统的稳定性和可靠性。通过技术创新,设计的智能插排不仅能有效节约能源,还能增强...

    DIY智能家居:基于AVR的智能节能插排的系统解决方案.doc

    预期实现方面,该智能节能插排的所有端口将可以灵活配置,支持独立定时,并具备自动休眠和电流过载保护功能。这样,每个端口都将根据实际需要进行精确控制,确保能源的高效使用。 综上所述,基于AVR的智能节能插排...

    电子功用-多功能充电插排

    5. **智能控制**:现代插排的智能化特性,如通过APP控制、定时开关、电量监测等功能的实现。 6. **节能技术**:介绍节能设计,如自动识别负载、待机功耗降低等,以减少不必要的电力消耗。 7. **市场分析**:分析多...

    电子-一种插排通断电控制电路

    这种电路设计可能包括了微处理器控制、继电器切换、传感器检测等功能,旨在实现对插排插座的智能控制。 描述中的“行业分类-电子-一种插排通断电控制电路”进一步明确了这个主题属于电子工程的范畴,特别是针对插排...

    基于单片机的多功能智能插排.pdf

    本文介绍的基于单片机的多功能智能插排,不仅具备传统插排的功能,还引入了多种智能化特性,通过WiFi模块实现了手机对插排的无线控制,满足了用户对节能和安全的双重需求。 首先,本文中提到的单片机是智能插排的...

    电子政务-安全节电型插排.zip

    首先,电子政务是指政府机构利用信息技术,特别是互联网技术,实现政务信息的采集、处理、传播和服务,以提高政府工作效率,促进政府与公众之间的信息交流,增强政府的透明度和公共服务能力。在这个过程中,信息安全...

    行业分类-电子-关于基于WIFI控制具有电能计费功能的插排的说明分析.rar

    标题中的“行业分类-电子-关于基于WIFI控制具有电能计费功能的插排的说明分析”揭示了本文档将深入探讨一个电子行业的创新应用,即通过WiFi技术实现远程控制并带有电能计量功能的智能插排。这种插排不仅能够方便用户...

    基于ARM的无线WiFi插排的设计.pdf

    本文深入探讨了一种基于ARM处理器的无线WiFi插排设计,该设计采用STM32 F103VET微控制器,通过WiFi模块连接至互联网,实现了对家用电器的远程操控。 ARM处理器作为现代嵌入式系统的核心,以其高性能、低功耗和可...

    java代码-java 插排 temp存储 直接移动

    在Java编程中,"插排(temp存储,直接移动)"通常指的是插入排序算法的实现方式。插入排序是一种简单直观的排序算法,它的工作原理是通过构造一个有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置...

    电子政务-可自检的电源插排.zip

    可自检电源插排有助于实现有效的电源分配和保护,确保关键设备在突发停电或电力故障时仍能正常运行。 4. **冗余电源设计**:为增加系统的可靠性,电子政务系统常常采用冗余电源设计,即多个电源插排互为备份,一旦...

    电子政务-停电自锁电源插排.zip

    在这个领域中,停电自锁电源插排是一个重要的硬件设施,它确保了在电力中断时,关键设备能够得到保护,防止因突然断电导致的数据丢失或系统损坏。 首先,我们要理解停电自锁电源插排的工作原理。这种特殊的电源插排...

    电子-一种显示用电量的电源插排

    在电子政务中,这样的智能插座可以用于监控政府办公设备的能耗,帮助制定节能策略,实现绿色办公。同时,它也可以作为教育公众节能意识的工具,通过公开这些数据,增强公众对能源问题的认识。 总之,这个电源插排...

    电子政务-可吸附的电源插排.zip

    在这个案例中,“可吸附的电源插排”可能是电子政务在公共设施管理或能源监控方面的实践,利用物联网技术实现远程控制和监测,提高能源使用效率,减少浪费。 物联网(IoT)在电子政务中的应用,主要是通过传感器、...

    基于STM32的节能按键插排.zip

    1. **按键控制**:通过STM32的GPIO功能,可以实现对插排开关的控制,按键按下后,微控制器响应并执行相应的开/关操作。 2. **电源管理**:通过ADC检测电压和电流,以监控负载状态,并可能根据负载大小调整电源策略...

Global site tag (gtag.js) - Google Analytics