Android单元测试之排序算法(冒泡 选择 插入 合并 快速 堆 Shell)

Android Studio中的单元测试 在最新版Android Studio(2.1)中,已经可以方便的使用Mockito进行含有android api的单元测试了。因此可以更好的进行敏捷开发与持续集成测试。创建单元测试在Android Studio中新建工程,目录结构如下图显示: 其中 androidTest目录是Instrumentation Test的工程代码 main即App工程代码 test就是单元测试工程代码。编写 阅读详情

基于算法导论 实现

public class ExampleUnitTest {
    @Test
    public void addition_isCorrect() throws Exception {
        assertEquals(4, 2 + 2);
    }

    @Test
    public void sort() throws Exception {
        bubbleSort();
        selectSort();
        insertSort();
        shellSort();
        mergeSort();
        quickSort();

        heapSort();
    }

    int[] inputs = {100, 120, 108, 109, 110, 160, 99, 89, 30, 150, 119, 200, 50, 33};

    public int[] getInput() {
        int s = inputs.length;
        int[] data = new int[s];
        for (int i = 0; i < s; i++) {
            data[i] = inputs[i];
        }
        return data;
    }

    //数据交换
    public void swap(int[] a, int i, int j) {
        int temp = a[i];
        a[i] = a[j];
        a[j] = temp;
    }

    public void print(int[] a,String title) {
        System.out.print(title+":\t");
        for(int num:a) {
            System.out.print(num + " ");
        }
        System.out.println();
    }

    //冒泡排序
    @Test
    public void bubbleSort() throws Exception {
        int[] a = getInput();
        int size = a.length;
        for(int i=0;i<size-1;i++){
            for(int k=size-1;k>i;k--){
                if(a[k]<a[k-1]){
                    swap(a,k,k-1);
                }
            }
        }
        print(a,"冒泡排序");
        bubbleDown();
    }

    public void bubbleDown() {
        int[] a = getInput();
        int size = a.length;
        for(int i=0;i<size-1;i++){
            for(int j=size-1;j>i;j--){
                if(a[j]>a[j-1]){
                    swap(a,j,j-1);
                }
            }
        }
        print(a,"冒泡逆排序");
    }

    //选择排序
    @Test
    public void selectSort() throws Exception {
        int[] input = getInput();
        int size = input.length;
        for(int i=0;i<size-1;i++){
            int k = i;
            for(int j=i+1;j<size;j++){
                if(input[j]<input[k]){
                    k = j;
                }
            }
            if(k!=i){
                swap(input,i,k);
            }
        }
        print(input,"选择排序");
        selectDown();
    }

    public void selectDown(){
        int[] a = getInput();
        int size = a.length;
        for(int i=0;i<size-1;i++){
            int k = i;
            for(int j=i;j<size;j++){
                if(a[j]>a[k]){
                    k = j;
                }
            }
            if(k!=i) {
                swap(a, k, i);
            }
        }
        print(a,"选择逆排序");
    }

    //插入排序
    @Test
    public void insertSort() throws Exception {
        int[] input = getInput();
        int size = input.length;
        for(int i=1;i<size;i++){
            int k = i-1;
            int temp = input[i];
            while(k>=0 && temp<input[k]){
                input[k+1] = input[k];
                k--;
            }
            if(1+k != i){
                input[k+1] = temp;
            }
        }
        print(input,"插入排序");
        insertDown();
    }

    public void insertDown(){
        int[] a = getInput();
        int size = a.length;
        for(int i=1;i<size;i++){
            int j = i-1;
            int tmp = a[i];
            while(j>=0 && a[j]<tmp){
                a[j+1] = a[j];
                j--;
            }
            a[j+1] = tmp;
        }
        print(a,"插入逆排序");
    }

    //shell排序
    @Test
    public void shellSort() throws Exception {
        int[] input = getInput();
        int size = input.length;
        for(int r=size/2;r>=1;r/=2){
            for(int i=r;i<size;i++){
                int k = i-r;
                int temp = input[i];
                while(k>=0 && temp<input[k]){
                    input[k+r] = input[k];
                    k-=r;
                }
                if(r+k != i){
                    input[k+r] = temp;
                }
            }
        }
        print(input,"Shell排序");
    }

    //快速排序
    @Test
    public void quickSort() throws Exception {
        int[] input = getInput();
        int size = input.length;
        quick(input,0,size-1);
        print(input,"快速排序");
        quickDown(input,0,size-1);
        print(input,"快速逆排序");
    }

    public void quick(int[] a,int p,int r){
        if(p<r){
            swapIndex(a,p,r);//快速排序提速器
            int q = partition(a,p,r);
            quick(a,p,q-1);
            quick(a,q+1,r);
        }
    }

    //应对有序数据时加速排序,减少递归
    public void swapIndex(int[] a,int p,int r){
        int q = (r+p)/2;
        swap(a,q,r);
    }

    public int partition(int[] a,int p,int r){
        int x = a[r];
        int i = p-1;
        for(int j=p;j<r;j++){
            if(a[j]<x){
                i++;
                swap(a,i,j);
            }
        }
        swap(a,i+1,r);
        return i+1;
    }

    public void quickDown(int[] a,int p,int r){
        if(p<r)
        {
            int q = partitionD(a,p,r);
            quickDown(a,p,q-1);
            quickDown(a,q+1,r);
        }
    }

    public int partitionD(int[] a,int p,int r){
        int x = a[r];
        int i = p-1;
        for(int j=p;j<r;j++){
            if(a[j]>x){
                i++;
                swap(a,i,j);
            }
        }
        swap(a,i+1,r);
        return i+1;
    }

    //堆排序
    @Test
    public void heapSort() throws Exception {
        int[] a = getInput();
        int size = a.length;
        buildMaxHeap(a);
        print(a,"堆排序");
        for(int i=size-1;i>0;i--){
            swap(a,0,i);
            size--;
            maxHeap(a,size,0);
        }
        print(a,"堆排序");
    }

    public void buildMaxHeap(int[] a){
        int hSize = a.length;
        for(int i=hSize/2;i>0;i--){
            maxHeap(a,hSize,i-1);
        }
    }

    public void maxHeap(int[] a,int hSize,int i){
        int l = 2*i+1;
        int r = l+1;
        int largest;
        if(l<hSize && a[l]>a[i]){
            largest = l;
        }else{
            largest = i;
        }
        if(r<hSize && a[r]>a[largest]){
            largest = r;
        }
        if(largest != i){
            swap(a,i,largest);
            maxHeap(a,hSize,largest);
        }
    }

    //合并排序
    @Test
    public void mergeSort() throws Exception {
        int[] input = getInput();
        int size = input.length;
        merge(input,0,size-1);
        print(input,"合并排序");
    }

    public void merge(int a[],int p,int r){
        if(p<r){
            int q = (p+r)/2;
            merge(a,p,q);
            merge(a,q+1,r);
            merge(a,p,q,r);
        }
    }

    //有序数组合并排序(无哨兵)
    public void merge(int a[],int p,int q,int r){
        int nL = q-p+1;
        int[] L = new int[nL];
        for(int i=0;i<nL;i++){
            L[i] = a[p+i];
        }
        int nR = r-q;
        int[] R = new int[nR];
        for(int i=0;i<nR;i++){
            R[i] = a[q+i+1];
        }
        int n1=0,n2=0;
        for(int i=p;i<=r;i++){
            if(n2>=nR || (n1<nL && L[n1]<R[n2])){
                a[i] = L[n1];
                n1++;
            }else{
                a[i] = R[n2];
                n2++;
            }
        }
    }
    //有序数组合并排序(带哨兵)
    public void mergeMark(int a[],int p,int q,int r){
        int n1 = q-p+1;
        int n2 = r-q;
        int[] L = new int[n1+1];
        int[] R = new int[n2+1];
        for(int i=0;i<n1;i++){
            L[i] = a[p+i];
        }
        for(int i=0;i<n2;i++){
            R[i] = a[q+i+1];
        }
        L[n1] = Integer.MAX_VALUE;
        R[n2] = Integer.MAX_VALUE;
        int i=0;
        int j=0;
        int k = p;
        for(;k<r+1;k++){
            if(L[i]<=R[j]){
                a[k] = L[i];
                i++;
            }else{
                a[k] = R[j];
                j++;
            }
        }
    }
}

 

秒懂,Java 注解 (Annotation)你可以这样学 文章开头先引入一处图片。 这处图片引自老罗的博客。为了避免不必要的麻烦,首先声明我个人比较尊敬老罗的。至于为什么放这张图,自然是为本篇博文服务,接下来我自会说明。好了,可以开始今天的博文了。 Annotation 中文译过来就是注解、标释的意思,在 Java 中注解是一个很重要的知识点,但经常还是有点让新手不容易理解。 我个人认为,比较糟糕的技术文档主要特征之一就是:用专业名词来... 阅读详情

相关推荐

瑞芯微RK3568开发板实战:Android11系统parameter.txt文件配置全解析(附常见问题排查)

本文深入解析了瑞芯微RK3568开发板在Android 11系统下parameter.txt文件的配置要点与实战技巧。作为BootLoader启动阶段的核心蓝图,该文件决定了硬件初始化、分区布局及电源管理。文章详细拆解了身份标识、GPIO控制(PWR_HLD)、命令行参数及分区表等关键字段的配置逻辑,并针对RK3568平台与Android 11特性提供了专项适配策略,最后附带了启动失败、分区异常等常见问题的深度排查方法。

php55的博客 897

经典排序算法、快速排序、冒泡、归并

经典排序算法    算法复杂度   相关概念 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。 不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。 时间复杂度:对排序数据的总的操作次数。反映当n变化时,操作次数呈现什么规律。 空间复杂度:是指算法在计算机内执行时所需存储空间的度量,它也是数据规模n的函数。 1、冒泡排序(Bu...

卢克治-BJTU-NLP-的博客 533

拒绝无意义刷屏,打造高效率热点追踪,极空间部署『TrendRadar』

今天的这个项目确实不错,通过部署在极空间NAS之后,我们就能一直不间断的获取到自己想要看到的新闻或者信息。项目的设置项其实有很多,有兴趣的小伙伴可以在部署之后自己慢慢挖掘~目前年终大促正在火热进行中,极空间NAS不管是新品还是之前在售的畅销型号都有专属的优惠,并且还能叠加国补、平台优惠等福利,享受180天换新以及2年质保服务 ,更有抽奖、晒单等活动,喜欢的小伙伴赶快冲吧!

qq_63499861的博客 2293

软件测试项目sort排序,快速排序方法及其单元测试

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace SortPractice{class MyQuickSorter{public int[] Sort(int[] src,int leftIndex,int rightIndex){int left = leftIn...

weixin_35642587的博客 601

Android13 CarPowerManagementService启动流程分析

在CarPowerManagementService中init调用PowerHalService的setListener设置事件侦听器以接收车辆的电源事件。

liuning1985622的博客 957

SMETANA 安装使用教程

关于SMETANA的安装和简单使用信息

qq_44940977的博客 1171

Java 参数传递是值传递还是引用传递?

首先把结论表明,Java 的参数传递是值传递,因为有部分细节让人引起误解以为是引用传递,故我们写两个例子来举例探讨。 public class ExampleUnitTest { @Test public void addition_isCorrect() { assertEquals(4, 2 + 2); int a = 10; S...

MarkRZJ的博客 166

【100%通过率】2023华为od机试C卷【电脑病毒感染】Python 实现

一个局域网内有很多台电脑,分别标注为 0 ~ N-1 的数字。相连接的电脑距离不一样,所以感染时间不一样,感染时间用t 表示。其中网络内一台电脑被病毒感染,求其感染网络内所有的电脑最少需要多长时间。如果最后有电脑不会感染,则返回-1.

MISAYAONE的博客 3033

单元测试(二)JUnit框架

一.JUnit的使用 public class ExampleUnitTest { @Test public void addition_isCorrect() throws Exception { assertEquals(4, 2 + 2); } } 仅支持纯Java代码,直接运行就是一次单元测试 二.JUnit注解 @Test 说明该方法是测...

yuemingxingxing的博客 402

关于 ABAP OPEN SQL 的动态 WHERE 条件和 Dynamic Selections

ABAP动态查询技术解析 本文介绍了ABAP中实现灵活数据库查询的动态选择技术,通过FREE_SELECTIONS函数组实现用户自定义查询条件。核心内容包括: 传统固定WHERE条件的局限性,无法满足业务多变需求 Dynamic Selections机制的工作原理,使用FREE_SELECTIONS_INIT初始化、FREE_SELECTIONS_DIALOG交互 完整Demo程序演示如何构建通用表数据浏览器: 用户输入表名后校验权限 调用动态选择函数生成条件 动态拼接WHERE子句执行查询 使用CL_SA

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 677

【51单片机仿真】基于51单片机设计的多功能电子时钟日历(实时时钟闹钟秒表温度检测)系统__资料编号5

该项目是基于单片机的多功能电子时钟系统,集成了时间显示、闹钟设置、秒表功能以及温度显示等功能。主要硬件包括1602液晶显示屏、DS1302时钟芯片、DS18B20温度传感器和蜂鸣器。系统通过按键进行时间和闹钟的设置,并实时显示当前时间和温度。

嵌入式阿齐Archie 2万+

c语言 链表 冒泡排序,[习题33]链表算法:冒泡排序、归并排序(单元测试)

使用教材完整源码 : liblcthw作者原话链表用于排序时很糟糕的,如果必须要排序,我们有别的更好的数据结构可用。之所以要将这两种算法, 是因为使用链表实现它们略微有点儿难度,而且还可以让你思考如何更加有效地进行链表操作。工作顺序首先,布置文件 list_algos.h、list_algos.c 、list_algos_tests.c1、查看文件结构,注意三个新增文件的位置liblcthw$ l...

weixin_30284287的博客 376

基于机器学习的网络安全态势感知模型研究与实现

基于机器学习的网络安全态势感知模型研究与实现 1. 背景介绍 1.1 网络安全态势感知的重要性 在当今互联网时代,网络安全已经成为一个至关重要的话题。随着网络攻击手段的不断升级和演变,传统的被动防御方式已经难以满足日益

AI大模型应用之禅 1583

测开笔试核心考点解析:从TCP三次握手到测试用例设计

在软件测试开发岗位的招聘中,笔试环节往往聚焦于计算机基础、编程能力和测试思维三大维度。理解TCP三次握手的本质、进程与线程的区别、Linux常用命令以及索引优化原理,是每个测开候选人必须具备的技术功底。测试用例设计则需要运用等价类划分、边界值分析和场景法等系统化方法论,覆盖功能、兼容性、性能与安全等多个层次。对于求职者而言,掌握数据结构算法、SQL语法和自动化测试工具链,同时培养从需求评审到线上监控的全链路质量意识,是提升竞争力的关键。本文结合小米测开实习笔试真题,从考点拆解到实战演练,帮助你在面试与笔试中

404

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

排序算法测试文档

排序算法测试文档 1.菜单界面 2.测试不同的大数据下各排序方式的用时 10000*1: 50000*1 200000*1 3.测试大量小数组下的各排序方式的用时 10000*1 50000*1 4.颜色排序 5.第k大数获取 6.第k小数字获取 7.选择排序方式并获得结果 8.读取文档并排序获得结果 xWt6H-1618718334391)] [外链图片转存中…(img-xmz0kHfc-1618718334392)]

weixin_50507425的博客 254

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

11种排序算法的简单实鉴和简单性能测试

最近看算法导论,前面说了几种排序算法,于是我就都实践了一把,并且写了个简单的程序测试他们的正确性和性能,看能否和理论对的上,虽然我考虑到系统调度等因素实验其实并不是很严谨,主要是作为娱乐吧哈哈哈哈。本次排序算法包括

pass_JMC的博客 1739

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

常见排序算法性能测试

冒泡排序 排序原理 冒泡排序方法是最简单的排序方法。这种方法的基本思想是,将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮。在冒泡排序算法中我们要对这个“气泡”序列处理若干遍。所谓一遍处理,就是自底向上检查一遍这个序列,并时刻注意两个相邻的元素的顺序是否正确。如果发现两个相邻元素的顺序不对,即“轻”的元素在下面,就交换它们的位置。显然,处理一遍之后,“最轻”的元素就浮到了最高位

HeadingAlong的博客 845

Android的Gradle技巧 5.1单元测试

5.1单元测试 问题 您想要测试应用程式的非Android部分。 解 使用Android Studio 1.1版本和Android版Gradle插件中添加的实验单元测试支持。 讨论 Eclipse Android开发工具(ADT)插件只支持集成测试,并且要求开发人员创建一个单独的项目,仅用于测试。切换到Android Studio和Gradle的一个优点是支持Android项目本身中的

曹浩洋的专栏 853

基本排序算法

@Test public void addition_isCorrect() { assertEquals(4, 2 + 2); int[] b = {49, 38, 65, 97, 76, 23, 17}; // InsetSort(b); // ShellInset(b); // SelectSort(b...

dakaniu的博客 245

Android单元测试(四):JUnit介绍

JUnit是java开发人员的一个主要的测试工具,做Android开发同样是离不开java的,所以Android单元测试依然可以基于JUnit来写测试。但是JUnit只能运行在纯java环境上,前面我们介绍过MVP架构下,可以将View层隔离开来,单独针对Presenter层、Model层来测试。 4.1 ...

weixin_34376986的博客 276

Studio单元测试(一)

如何在studio下进行java测试?  studio是不同于eclipse的,在eclispe中我们可以选择创建一个java project,但是studio并没有这个选项(至少我没有看到)。所以当我们想在studio上进行java测试时怎么办? studio提供了一个很好用的功能,在studio提供了单元测试,在java单元测试下我们可以模拟java project。

u010899537的博客 704

Android 单元测试初体验(二)-断言

当初在学校学安卓的时候,老师敢教学进度,翻到单元测试这一章节的时候提了两句,没有把单元测试当重点讲,只是说我们工作中几乎不会用到,果真在之前的几年工作当中我真的没有用到,工作中都没有写过单元测试,后来我自己也下意识的忽略了这一块,直到听说现在这家公司后面会要求单元测试用例覆盖率达到百分之七十。我开始慌了,单元测试什么的,国内真的不太重视,这不,抽个周末简单学习下。对于安卓的单元测试的话,现在新建一个项目可以看到都是用的Junit4,ps:涉及Compose的单元测试本文不会过多解释。这是官网前一篇。

我怀里的猫的博客 1565

【Android-UnitTest】Android单元测试问题汇总

1. 基本使用 2. 外部类库引用出错 报错: java.lang.RuntimeException: Method d in android.util.Log not mocked. See http://g.co/androidstudio/not-mocked for details. at android.util.Log.d(Log.java) at ble.ztj.pro.controlble.ExampleUnitTest.addition_isCorrect(.

dandelionela的博客 1190

冒泡排序及其加强版

通过这一篇文章,我们了解了冒泡排序及其加强版。其中有一点需要格外注意。它是,在发现数据类型被固定死,改变这种类型又丢掉了那种类型,顾此失彼时,我们可以运用指针来解决。我对指针的理解是,指针是死的,但是它指向的数据却是活的,它就像一个传送器,当你前路不通时,借助指针,你能到达想去的远方。我是happy sky,编程之路你我一起探索。

Happysky_1的博客 258

制造StackOverflowError与OutOfMemoryError

public class ExampleUnitTest { @Test public void addition_isCorrect() throws Exception { oom(); // so(); } ArrayList<String[]> list = new ArrayList<>(); private void oom

魑魅魍魉9527 455

简单单元测试 数组排序

云课堂id:Search144 package main; import java.util.Arrays;import org.junit.Test; public class Main { @Test public void main(){ System.out.println("hello world"); } @Test public void sort(){//

qq_35267124的博客 924
上一篇: Android注解组件化方案
下一篇: Android Handler机制核心浅析
Luiing
博客等级 码龄17年 9粉丝 14原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值