Android 常用算法

Android常用的加密算法 DES DES-Data Encryption Standard,即数据加密算法。是IBM公司于1975年研究成功并公开发表的。DES算法的入口参数有三个:Key、Data、Mode。其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。 DES算法把64位的明文输入块变为64位的密文输出块,它所... 阅读详情

1.插入排序算法

插入排序的基本思想是在遍历数组的过程中,假设在序号 i 之前的元素即 [0..i-1] 都已经排好序,本趟需要找到 i 对应的元素 x 的正确位置 k ,并且在寻找这个位置 k 的过程中逐个将比较过的元素往后移一位,为元素 x “腾位置”,最后将 k 对应的元素值赋为 x ,一般情况下,插入排序的时间复杂度和空间复杂度分别为 O(n2 ) 和 O(1)。

/**
* @param int[] 未排序数组
* @return int[] 排完序数组
  */
 
  public  int [] sortInsert( int [] array){
       for ( int  i= 1 ;i<array.length;i++){
            int  temp = array[i];
            int  j;
            for (j=i- 1 ;j >=  0  && temp< array[j]; j--){
                 array[j +  1 ] = array[j];
            }
            array[j +  1 ] = temp;
       }
       return  array;
  }
2.选择排序算法

选择排序的基本思想是遍历数组的过程中,以 i 代表当前需要排序的序号,则需要在剩余的 [i…n-1] 中找出其中的最小值,然后将找到的最小值与 i 指向的值进行交换。因为每一趟确定元素的过程中都会有一个选择最大值的子流程,所以人们形象地称之为选择排序。选择排序的时间复杂度和空间复杂度分别为 O(n2 ) 和 O(1) 。

/**
  * @param int[] 未排序数组
  * @return int[] 排完序数组
  */
 
  public  int [] sortSelect( int [] arr){
       for  ( int  i =  0 ; i < arr.length; i++) {
             int  miniPost = i;
             for  ( int  m = i +  1 ; m < arr.length; m++) {
                   if  (arr[m] < arr[miniPost]) {
                         miniPost = m;
                   }
             }
 
             if  (arr[i] > arr[miniPost]) {
                   int  temp;
                   temp = arr[i];
                   arr[i] = arr[miniPost];
                   arr[miniPost] = temp;
            }
       }
       return  arr;
  }

3.冒泡排序算法

冒泡排序是將比較大的數字沉在最下面,较小的浮在上面

/**
  * @param int[] 未排序数组
  * @return int[] 排完序数组
  */
 
  public  int [] sortSelect( int [] arr){
       for  ( int  i =  0 ; i < arr.length; i++) {
             int  miniPost = i;
             for  ( int  m = i +  1 ; m < arr.length; m++) {
                   if  (arr[m] < arr[miniPost]) {
                         miniPost = m;
                   }
             }
 
             if  (arr[i] > arr[miniPost]) {
                   int  temp;
                   temp = arr[i];
                   arr[i] = arr[miniPost];
                   arr[miniPost] = temp;
            }
       }
       return  arr;
  }

4.快速排序算法

通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可以分别对这两部分记录继续进行排序,已达到整个序列有序的目的,本质就是,找一个基位(枢轴,分水岭,作用是左边的都比它小,右边的都比它大.可随机,取名base,首先从序列最右边开始找比base小的,如果小,换位置,从而base移到刚才右边(比较时比base小)的位置(记为临时的high位),这样base右边的都比base大。然后,从序列的最左边开始找比base大的,如果大,换位置,从而base移动到刚才左边(比较时比base大)的位置(记为临时的low位),这样base左边的都比base小,循环以上两步,直到 low == heigh, 这使才真正的找到了枢轴,分水岭. 返回这个位置,分水岭左边和右边的序列,分别再来递归。

/**
  * @param int[] 未排序数组
  * @return int[] 排完序数组
  */
 
  public  int [] sortSelect( int [] arr){
       for  ( int  i =  0 ; i < arr.length; i++) {
             int  miniPost = i;
             for  ( int  m = i +  1 ; m < arr.length; m++) {
                   if  (arr[m] < arr[miniPost]) {
                         miniPost = m;
                   }
             }
 
             if  (arr[i] > arr[miniPost]) {
                   int  temp;
                   temp = arr[i];
                   arr[i] = arr[miniPost];
                   arr[miniPost] = temp;
            }
       }
       return  arr;
  }

5.合并排序算法

归并排序采用的是递归来实现,属于“分而治之”,将目标数组从中间一分为二,之后分别对这两个数组进行排序,排序完毕之后再将排好序的两个数组“归并”到一起,归并排序最重要的也就是这个“归并”的过程,归并的过程中需要额外的跟需要归并的两个数组长度一致的空间

/**
  * @param int[] 未排序数组
  * @return int[] 排完序数组
  */
private  int [] sort( int [] nums,  int  low,  int  high) {
       int  mid = (low + high) /  2 ;
       if  (low < high) {
           // 左边
           sort(nums, low, mid);
           // 右边
           sort(nums, mid +  1 , high);
           // 左右归并
           merge(nums, low, mid, high);
      }
      return  nums;
}
 
private  void  merge( int [] nums,  int  low,  int  mid,  int  high) {
       int [] temp =  new  int [high - low +  1 ];
       int  i = low; // 左指针
       int  j = mid +  1 ; // 右指针
       int  k =  0 ;
       // 把较小的数先移到新数组中
       while  (i <= mid && j <= high) {
           if  (nums[i] < nums[j]) {
                temp[k++] = nums[i++];
           }  else  {
                temp[k++] = nums[j++];
           }
       }
       // 把左边剩余的数移入数组
       while  (i <= mid) {
            temp[k++] = nums[i++];
       }
       // 把右边边剩余的数移入数组
       while  (j <= high) {
            temp[k++] = nums[j++];
       }
       // 把新数组中的数覆盖nums数组
       for  ( int  k2 =  0 ; k2 < temp.length; k2++) {
            nums[k2 + low] = temp[k2];
       }
  }
 
public  int [] sortMerge( int [] array) {
      return  sort(array,  0 , array.length -  1 );
}

6.希尔排序算法

希尔排序的诞生是由于插入排序在处理大规模数组的时候会遇到需要移动太多元素的问题。希尔排序的思想是将一个大的数组“分而治之”,划分为若干个小的数组,以 gap 来划分,比如数组 [1, 2, 3, 4, 5, 6, 7, 8] ,如果以 gap = 2 来划分,可以分为 [1, 3, 5, 7] 和 [2, 4, 6, 8] 两个数组(对应的,如 gap = 3 , 则划分的数组为: [1, 4, 7] 、 [2, 5, 8] 、 [3, 6] )然后分别对划分出来的数组进行插入排序,待各个子数组排序完毕之后再减小 gap 值重复进行之前的步骤,直至 gap = 1 ,即对整个数组进行插入排序,此时的数组已经基本上快排好序了,所以需要移动的元素会很小很小,解决了插入排序在处理大规模数组时较多移动次数的问题,

希尔排序是插入排序的改进版,在数据量大的时候对效率的提升帮助很大,数据量小的时候建议直接使用插入排序就好了。

/**
* @param int[] 未排序数组
* @return int[] 排完序数组
  */
 
public  int [] sortShell( int [] array) {
      // 取增量
      int  step = array.length /  2 ;
      while  (step >=  1 ) {
           for  ( int  i = step; i < array.length; i++) {
                int  temp = array[i];
                int  j =  0 ;
                // 跟插入排序的区别就在这里
                for  (j = i - step; j >=  0  && temp < array[j]; j -= step) {
                      array[j + step] = array[j];
                }
                array[j + step] = temp;
           }
           step /=  2 ;
      }
      return  array;
}

7.堆排序算法

本质就是先构造一个大顶堆,parent比children大,root节点就是最大的节点 把最大的节点(root)与尾节点(最后一个节点,比较小)位置互换,剩下最后的尾节点,现在最大,其余的,从第一个元素开始到尾节点前一位,构造大顶堆递归。

/**
* @param int[] 未排序数组
* @return int[] 排完序数组
  */
 
public  int [] sortShell( int [] array) {
      // 取增量
      int  step = array.length /  2 ;
      while  (step >=  1 ) {
           for  ( int  i = step; i < array.length; i++) {
                int  temp = array[i];
                int  j =  0 ;
                // 跟插入排序的区别就在这里
                for  (j = i - step; j >=  0  && temp < array[j]; j -= step) {
                      array[j + step] = array[j];
                }
                array[j + step] = temp;
           }
           step /=  2 ;
      }
      return  array;
}

Android常用加解密算法 数据安全,不管是对于企业还是个人都是十分重要。而作为一个移动开发者,我们更需要去考虑数据传输的安全性,去保护企业及个人信息安全。在Java,Android语言中,有许多的常用加解密算法,例如:对称加密算法AES,DES,3DES,非对称加密算法RSA,经典哈希算法MD5,SHA. 对称加密算法:加密秘钥和解密秘钥相同 例:AES,DES,3DES 非对称加密算法:有公钥和秘钥,公钥加密 阅读详情

相关推荐

从《新程序员》系列看程序员职业发展趋势与成长路径

在信息技术日新月异的当下,软件开发行业蓬勃发展,程序员作为行业的核心力量,其成长与发展路径备受瞩目。《新程序员》系列杂志应运而生,以其前瞻性的视角、丰富多元的内容,为广大程序员尤其是新程序员提供了洞察行业趋势、学习前沿技术、汲取前辈经验的宝贵窗口。该系列杂志由优快云精心打造,自推出以来,便在开发者群体中引发了强烈反响。《新程序员》系列内容涵盖了从基础技术知识的深入解读,到行业前沿趋势的精准预测;从优秀开发者的成长历程分享,到各大企业数字化转型的实践案例剖析等多个维度。

AllenLV的博客 2257

Android 数据存储

文章目录5.1 数据存储方式5.2 文件存储方式5.2.1 [内部存储]将数据存入文件中5.2.1 [内部存储]从文件中读取数据5.2.2 [外部存储]将数据存入文件中5.2.2 [外部存储]从文件中读取数据关于权限申请5.3 SharedPreferences存储5.3.1将数据存入`SharedPreferences`5.3.1 读取`SharedPreferences`文件中的数据5.3.2 删除`SharedPreferences`文件中的数据实战代码[保存账号和密码]核心代码1. [JAVA

小源同学的博客 1365

Android11.0系统中适配EC20模块4G及GPS功能

本文主要描述在RK3568Android11中适配EC20模块,启用4G与GPS功能。

yjz_0314的博客 2791

Android开发——String和int的用法区别

Android开发——String和int的用法区别 一、int的用法 1、int用于初始化数据,但仅限于数字的初始化 public void number(View v){ int a = 1; System.out.println(a); } 这样输出来的就是1 2、当继续进行初始化数据,则以前初始化的数据将会被新的数据所覆盖 public void number(View v){ int ...

Krisit的博客 9149

MT6768平台Sensor Bring Up全流程实战:从驱动添加到问题排查(附避坑指南)

本文详细介绍了联发科MT6768平台Sensor Bring Up的全流程实战指南,从驱动添加、硬件配置到问题排查,提供了全面的避坑建议。内容涵盖环境准备、驱动文件集成、硬件接口配置、编译系统适配以及常见问题解决方案,帮助开发者高效完成传感器集成与调试工作。

weixin_30374009的博客 416

自动驾驶中的多传感器融合实战:用卡尔曼滤波搞定毫米波雷达与摄像头航迹对齐

本文深入探讨了自动驾驶中多传感器融合的实战技术,重点介绍了如何使用卡尔曼滤波实现毫米波雷达与摄像头的航迹对齐。通过分析传感器特性差异、时空同步挑战及工程化实现步骤,提供了包括状态向量定义、观测矩阵设计和故障检测机制在内的完整解决方案,最终实现0.15米以内的高精度航迹对齐。

weixin_28728495的博客 410

Android 7大常用算法

堆排序算法、本质就是先构造一个大顶堆,parent比children大,root节点就是最大的节点 把最大的节点(root)与尾节点(最后一个节点,比较小)位置互换,剩下最后的尾节点,现在最大,其余的,从第一个元素开始到尾节点前一位,构造大顶堆递归。

yihanss的博客 988

新手秒变高手:使用一键脚本快速安装OpenClaw并完成初始化配置

一键脚本是一种自动化工具,可以帮助用户快速完成软件的安装和配置过程,无需手动执行繁琐的命令。OpenClaw提供了官方的一键安装脚本,让新手用户也能轻松部署OpenClaw。

一键难忘的博客 358

android string转int_Java中List、Integer[]、int[] 的相互转换

本文涉及到一些 Java8 的特性。int[]数组intint[] 转 List<Integer>ListArrays.stream(arr) 可以替换成IntStream.of(arr)。1.使用Arrays.stream将int[]转换成IntStream。2.使用IntStream中的boxed()装箱。将IntStream转换成Stream<Integer>。3.使...

weixin_39607798的博客 966

STM32cubeMX配置FreeRTOS软件定时器

文章目录前言1.软件定时器概述一.软件定时器特性二、使用cubeMX生成软件定时器总结 前言 本文主要带大家了解什么是软件定时器,并且带大家使用cubeMX配置软件定时器。 1.软件定时器概述 一.软件定时器特性 软件定时器就是一个闹钟当时间到了就执行相对应的任务或者代码。软件定时器是基于系统滴答中断的。在FreeRTOS中我们可以设置无数个软件定时器。 指定时间:启动定时器和运行回调函数,两者的间隔被称为定时器的周期 (period)。 指定类型定时器有两种类型: 1.一次性 这类定时器启动后,它的回调函

m0_49476241的博客 6949

基础入门篇 | YOLOv8 项目【训练】【验证】【推理】最简单教程 | YOLOv8必看 | 最新更新,直接打印 FPS,mAP50,75,95

三个文件搞定YOLOv8【训练】【验证】【推理】🚀🚀🚀

Coding... 2万+

Android常用算法

最近准备研究下Android的算法,以下的内容算作是个笔记吧,如果有不对的地方,还请各方大神给与指出..... 1.插入排序 插入排序思路: 首先默认数组中第一个( [0] )是排好序的,从第二位( [1] )开始进行判断,如果第二位大于第一位的话,就插入到第二位,不大于的话,就将...

1890

31、自然语言生成中的流畅度评估

本博客探讨了自然语言生成(NLG)中流畅度评估的重要性和方法。文章详细介绍了流畅度的定义及其影响因素,包括句法结构、词汇选择、语义一致性和段落组织。同时,讨论了自动评估和人工评估两种主要方法,并以机器翻译、自动摘要和对话系统为例分析了流畅度评估的应用场景。最后,文章提出了提升流畅度的技术策略以及未来研究方向,为相关领域的研究者和开发者提供了有价值的参考。

h9j8k7l6m5n的博客 273

Android之常用加密算法

今天记录一下,安卓常用的加密算法。并无干货,只是自己的对算法类别的学习,不知道是否可以应对接下来的移动支付。可逆加密和非可逆加密 可逆加密根据其加密解密是否使用的同一个密钥而可以分为对称加密和非对称加密。 对称加密:是指在加密和解密时使用的是同一个密钥。 非对称加密:在加密和解密过程中使用不同的密钥,即公钥和私钥。公钥用于加密,所有人都可见,私钥用于解密,只有解密者持有。 MD5 MD5即...

Zachary的基地 852

温度PID控制PLC程序

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

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

android常用算法

android常用算法

oneblue123的博客 867

ssm框架搭建

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

android 开发常用算法,Android开发 常用排序算法

1、冒泡排序冒泡排序,数组从小到大排列,比较相邻的元素。如果第一个比第二个大,就交换他们两个。示例:/** 冒泡排序* 前后两个元素相比较,最大的往后排,每一轮都可以找到一个最大的元素*/publicstaticint[] bubbleSort(int[] nums){int temp =0;for (int i = 0; i < nums.length-1; i++) {for (int ...

weixin_32158567的博客 552

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Android 中常用加密算法

在Android开发中,难免会遇到需要加解密一些数据内容存到本地文件、或者通过网络传输到其他服务器和设备的问题,但并不是使用了加密就绝对安全了,如果加密函数使用不正确,加密数据很容易受到逆向破解攻击。还有很多开发者没有意识到的加密算法的问题。 1. 对称加密 对称加密:加密和解密都使用同一把秘钥,这种加密方法称为对称加密,也称为单密钥加密。 简单理解为:加密解密都是同一把钥匙。 常用算...

muranfei的博客 2541

java安卓开发!2021最新Android常用开源库总结,算法太TM重要了

前言 伟人曾经说过: 书是人类进步的阶梯 书中自有黄金屋,书中自有颜如玉 读书破万卷,下笔如有神 书是唯一不死的东西。 书籍是伟大的天才留给人类的遗产。 最近有很多朋友在我的公众号上提问“Android开发的经典入门教材和学习路线?”、“Android 开发入门教程有哪些推荐?”等类似的问题,我们不断重复回答这些问题,这让我萌生了做 2020ndroid开发爆款书籍推荐:从小白—Android高级工程师系列学习路线书籍介绍的想法,整理收集开发大牛的学习经验,以便让我们少走弯路,更快速成长。希望

fanzhang_vip0723的博客 289

android开发常用的算法

常用的排序算法冒泡排序和优化算法 快排冒泡排序冒泡升级算法 快排 使用递归 冒泡排序和优化算法 快排 冒泡排序 private static void getmaopao(int s[]){ int temp =0; for(int i=0;i&amp;lt;s.length;i++){ for(int j=i+1;j&amp;lt;s.length;j++){ if(s[i]&amp;lt;s[j...

l827995939的博客 1457

2024年安卓最全Android程序员经常遇到的算法问题,七大常用的算法,程序员的面试题

由于本文罗列的知识点是根据我自身总结出来的,并且由于本人水平有限,无法全部提及,欢迎大神们能补充~将来我会对上面的知识点一个一个深入学习,也希望有童鞋跟我一起学习,一起进阶。提升架构认知不是一蹴而就的,它离不开刻意学习和思考。**这里,笔者分享一份从架构哲学的层面来剖析的视频及资料分享给大家,**梳理了多年的架构经验,筹备近1个月最新录制的,相信这份视频能给你带来不一样的启发、收获。,第一时间获取最新知识点Android架构师之路很漫长,一起共勉吧!

2301_82243733的博客 756

Android 常用排序中的冒泡排序和二分排序算法

Android 常用排序中的冒泡排序和二分排序算法 一 冒泡排序算法 二分排序算法

chao15801080501的博客 585

Android程序员经常遇到的算法问题,七大常用的算法

4.快速排序算法通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可以分别对这两部分记录继续进行排序,已达到整个序列有序的目的,本质就是,找一个基位(枢轴,分水岭,作用是左边的都比它小,右边的都比它大.可随机,取名base,首先从序列最右边开始找比base小的,如果小,换位置,从而base移到刚才右边(比较时比base小)的位置(记为临时的high位),这样base右边的都比base大。

2401_84149496的博客 1099

盘点几个安卓逆向之常用加密算法

点击上方“Python爬虫与数据挖掘”,进行关注回复“书籍”即可获赠Python从入门到进阶共10本电子书今日鸡汤岐王宅里寻常见,崔九堂前几度闻。大家好,我是码农星期八。本教程只用于学习探讨,不允许任何人使用技术进行违法操作,阅读教程即表示同意!为什么要学习加密算法在搞逆向进行抓包的时候,可以经常发现一些莫名其妙的字符串,可能是81dc9bdb52d04dc20036db...

pdcfighting的博客 1048

Android 数据结构以及常用的算法

转自:http://blog.youkuaiyun.com/qq_31977927/article/details/58585933 一、Android常见数据结构&优缺点。分享给大家,希望对大家有帮助! 数组 优点:查询快,如果知道索引可以快速地存取 缺点:删除慢,大小固定 有序数组 优点:比无序数组查找快 缺点:删除和插入慢,大小固定 栈 优点:提供后

wojiaotianyong的博客 7753

android 常用的算法

1.插入排序算法 插入排序的基本思想是在遍历数组的过程中,假设在序号 i 之前的元素即 [0..i-1] 都已经排好序,本趟需要找到 i 对应的元素 x 的正确位置 k ,并且在寻找这个位置 k 的过程中逐个将比较过的元素往后移一位,为元素 x “腾位置”,最后将 k 对应的元素值赋为 x ,一般情况下,插入排序的时间复杂度和空间复杂度分别为 O(n2 ) 和 O(1)。

Lespace 6389
上一篇: 自己做的apk遇到的难点及知识点总结
下一篇: Android 数据结构
Happy_Develop_
博客等级 码龄12年 26粉丝 99原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值