数组

算法——选择排序、插入排序和希尔排序(改进的插入排序)

爷,独闯天下 提交于 2020-03-21 00:44:54
3 月,跳不动了?>>> 选择排序 首先,找到数组中最小的那个元素,其次,将它和数组的第一个元素交换位置(如果第一个元素就是最小元素那么它就和自己交换)。再次,在剩下的元素中找到最小的元素,将它与数组的第二个元素交换位置。如此以往,直到 将整个数组排序。 性能 :算法的时间效率取决于比较的次数。对于长度为N的数组,选择排序需要大约N²/2次比较和N次交换。 特点 :1. 运行时间和输入无关 :比如即使输入一个有序的数列,还是会和随机数列一样,进行比较、交换处理。 2. 数据移动是最少的 :共N次交换,即交换次数和数组大小是线性关系。其他任何算法都不具备这个特征,大部分都是线性对数或是平方级别的。 函数实现如下: public class Selection { public static void sort(Comparable[] a) { //将a[]按升序排列 int N=a.length; for(int i=0;i<N;i++) { int min=i; for(int j=i+1;j<N;j++) { if(less(a[j],a[min]))min=j; } exch(a,i,min); } } } 插入排序 就像通常人们整理桥牌的方法一样,一张一张来,将每一张牌插入到其他已经有序的牌中的适当的位置。 在计算机中的实现中,为了给要插入的元素腾出空间

如何将值和键都推送到数组中

本小妞迷上赌 提交于 2020-03-20 14:47:23
3 月,跳不动了?>>> 看看这段代码: $GET = array(); $key = 'one=1'; $rule = explode('=', $key); /* array_push($GET, $rule[0] => $rule[1]); */ 我正在寻找这样的东西,以便: print_r($GET); /* output: $GET[one => 1, two => 2, ...] */ 有这个功能吗? (因为 array_push 不会这样工作) #1楼 您可以使用union运算符( + )组合数组并保留添加的数组的键。 例如: <?php $arr1 = array('foo' => 'bar'); $arr2 = array('baz' => 'bof'); $arr3 = $arr1 + $arr2; print_r($arr3); // prints: // array( // 'foo' => 'bar', // 'baz' => 'bof', // ); 所以你可以做 $_GET += array('one' => 1); 。 有关union运算符与 array_merge 的使用的更多信息,请参阅 http://php.net/manual/en/function.array-merge.php 中的文档。 #2楼 不,没有关联数组的 array_push

Python 关于数组矩阵变换函数numpy.nonzero(),numpy.multiply()用法

安稳与你 提交于 2020-03-20 13:23:01
1.numpy.nonzero(condition),返回参数condition(为数组或者矩阵)中非0元素的索引所形成的ndarray数组,同时也可以返回condition中布尔值为True的值索引,其中,数值0为False,其余的都为True。 1 >>>b=np.mat(np.arange(10)).T 2 >>>b 3 matrix([[0], 4 [1], 5 [2], 6 [3], 7 [4], 8 [5], 9 [6], 10 [7], 11 [8], 12 [9]]) 13 >>>np.nonzero(b>2) 14 (array([3, 4, 5, 6, 7, 8, 9], dtype=int64), 15 array([0, 0, 0, 0, 0, 0, 0], dtype=int64)) 16 >>>np.nonzero((b.A>2)*(b.A<8)) 17 (array([3, 4, 5, 6, 7], dtype=int64), array([0, 0, 0, 0, 0], dtype=int64)) 1 >>> x = np.eye(3) 2 >>> x 3 array([[ 1., 0., 0.], 4 [ 0., 1., 0.], 5 [ 0., 0., 1.]]) 6 >>> np.nonzero(x) 7 (array([0, 1, 2]),

Java基础--day09

烂漫一生 提交于 2020-03-20 10:32:12
一维数组 单个的数组变量可以引用一个大的数据集合 1. 基础知识 一旦数组被创建,它的大小是固定的,使用一个数组引用变量,通过下标来访问数组中的元素 1.1 声明数组变量 elementType[] arrayRefVar; (元素类型[] 数组引用变量;) e.g double[] mylist; 声明数组不在内存中分配空间,它只是创建一个 对数组的引用 的存储位置 1.2 创建数组 arrayRefVar = new elementType[arraySize]; [x] 使用 new elementType[arraySize] 创建一个数组 [x] 把新创建的数组的 引用赋值 给变量 arrayRefVar 声明一个数组变量、创建数组、然后将数组引用赋值给变量 这三个步骤可以合并成一条: elementType[] arrayRefVar = new elementType[arraySize]; 元素类型[] 数组引用变量 = new 元素类型[数组大小] double[] myList = new double[10]; 赋值 为: arrayRefVar[index] = value; 在java中,数组变量时一种引用,如 myList 是一个含有10个 double 型元素数组的引用变量 1.3 数组大小和默认值 在分配数组时候,必须指定该数组能够存储的元素个数

CSharp调用C++编写的DLL的方法

痴心易碎 提交于 2020-03-20 06:18:33
自己比较懒,有的时候想写点东西,但由于文笔不行、技术不行也就没有怎么写。经常是用到什么、学习什么的时候,简单写点,权当是个学习笔记。上博客的次数也很少,有人给我留言也是没有怎么及时的回复,深感抱歉! 在一些特殊的行业,比如我从事的GIS、地质行业,大部分软件还是以C/S形式存在,软件大多是产品来销售。这些程序大部分是Cpp语言来编写,一方面是考虑到效率问题,另一方面可能是因为历史原因,创建者使用Cpp,后面接班人也就继续使用。 但是使用Cpp去做项目的时候,又会倍感cpp的笨拙,做个界面非常费劲。所以如果能够使用C#语言来研发,使用WinForm、WPF来做界面,世界就会美好很多。可是软件产品生成的很多成果想要利用起来就比较困难,用C#重新写一遍系统是一条很好的路,技术难度低,但是工作量大,后期维护也比较困难,最主要的是在项目实施过程中,时间不够。另外一种思路就是对现有的Cpp系统进行包装,直接用C#调用,这几天比较了几种方法,最后使用CLR对C++进行封装了,可行性比较高。 一). PInvoke 不需要修改C++的DLL,直接在C#程序中把需要的接口引进进来即可。开始的时候感觉比较顺畅,但是后面越搞越麻烦,在CSharp和Cpp之间传递的个数组、传递个类,需要编写很多,并且MS上的文档也看得晕乎乎的。最后就放弃了。 1. 首先创建一个C++的普通DLL

指针函数/函数指针/指针数组/数组指针 区别

∥☆過路亽.° 提交于 2020-03-20 04:32:30
今天又遇到了指针数组,理解通道数据搞了半天。。。 bool LocalFileSaver::SaveADCData(Cash *data, LPCTSTR folder) { if (_tcscmp(folder, _T("")) == 0) { return false; } TCHAR path[MAX_PATH] = { 0 }; TCHAR fileName[128] = { 0 }; char sn[24] = { 0 }; strcpy(sn, data->GetSN()); if (sn[0] == '\0') { sprintf(sn, "0"); } wsprintf(fileName, _T("%04d%02d%02d_%02d%02d%02d_%03d_Err%03d_LastErr0x0_Den%d_Dir%d_Ver%02d_SN%s_adc.raw"), runCashStartTime.wYear, runCashStartTime.wMonth, runCashStartTime.wDay, runCashStartTime.wHour, runCashStartTime.wMinute, runCashStartTime.wSecond, data->Id(), data->GetError(), data->GetDenomination(),

SpringMVC解决前台传入的数组或集合类型数据

£可爱£侵袭症+ 提交于 2020-03-19 23:03:51
1前台处理如下: $.ajax({ url:"saveMapInfo", type:"POST", dataType:"json", contentType:'application/json;charset=utf-8', data:JSON.stringify(dti), success:function(data){ if(data.code==0){ $.messager.show({ title:'提示', msg:'保存成功', timeout:10000, showType:'slide' }); $('#table').datagrid('reload','${ctx}/listMapInfo'); }else{ showError(data.info?data.info:'保存失败!'); } }, error:function(data){ showError('保存失败!'); } }); 其中dti是需要传入的数组或集合对象 2后台接收 @RequestMapping("/saveMapInfo") @ResponseBody public JsonResult saveMapInfo(@RequestBody Map<String,DataTableInfo> dti) throws JsonGenerationException,

[javascript]数组基础

只愿长相守 提交于 2020-03-19 19:10:02
arguments的用法 1 function sum(){ 2 var result = 0; 3 for(var i=0;i<arguments.length;i++) 4 { 5 result += argument[i]; 6 } 7 return result; 8 } 9 alert(sum(2,3,4)); //10 数组的定义 var a = [1,2,3] 或者 var a = new Array(1,2,3); 数组的属性 -length 既可以获取,也可以设置 var arr = [0,1,2,3] arr.length = 3 ; alert(arr); //0,1,2 数组的添加和删除 -push 在数组末尾添加一个元素 var arr = [0,1,2]; arr.push(3); alert(arr); //0,1,2,3 -pop 在数组末尾删除一个元素 var arr = [0,1,2]; arr.pop(); alert(arr); //0,1 -shift 在数组头部删除一个元素 var arr = [0,1,2]; arr.shift(); alert(arr); //1,2 -unshift 在数组头部添加一个元素 var arr = [0,1,2]; arr.unshift(3); alert(arr); //3,0,1,2

【华为云技术分享】容易造成单片机内存溢出的几个陷阱

放肆的年华 提交于 2020-03-19 17:39:52
【摘要】 关于程序变量和内存分配,都是需要我们时刻关注的问题。我相信有不少人在这块犯过很多的错误,也可能说明我们基础不够扎实,编写程序的习惯也不够好。 总结一下关于程序的变量和内存方面的概念,虽然是属于C语言方面非常基础的知识,但是工作中一不小心还是会发生一些内存泄漏、内存溢出之类的问题。所以自己对这块的理解也还远远不够。在这总结一下关于这方面的知识点,用来互相学习,更用来提醒自己,并作为自己的一个经验总结。 总结一下关于程序的变量,和内存方面的概念,虽然是属于C语言方面非常基础的知识,但是工作中一不小心还是会发生一些内存泄漏、内存溢出之类的问题。所以自己对这块的理解也还远远不够。在这总结一下关于这方面的知识点,用来互相学习,更用来提醒自己,并作为自己的一个经验总结。 我们知道我们的程序一般是储存在flash里面的,但是运行的时候是在内存(RAM)里运行的,我们的程序一般有这么几个部分组成:宏定义、变量、常量、动态区、程序代码。 我们通过下面这个Demo程序来了解一下程序在运行的时候,这些部分大概都在内存中的哪些地方。 1 #define OFF 0x00 //宏定义不占用内存空间,宏在预处理阶段会被替换掉,执行文件中并不存在宏定义. 2 float Num = 3.14; //全局变量,存在于“变量区” 3 char* str = NULL; //全局变量,存在于“变量区” 4

如何将向量转换为数组

折月煮酒 提交于 2020-03-19 12:44:56
3 月,跳不动了?>>> 如何将 std::vector<double> 转换为 double array[] ? #1楼 vector<double> thevector; //... double *thearray = &thevector[0]; 按照标准可以保证可以使用此 thearray ,但是有一些警告:特别要注意,只有在 thevector 处于范围内时才使用 thearray 。 #2楼 有一个相当简单的技巧,因为此规范现在 保证 向量可以连续存储其元素: std::vector<double> v; double* a = &v[0]; #3楼 向量实际上是皮肤下的数组。 如果具有功能: void f( double a[]); 您可以这样称呼它: vector <double> v; v.push_back( 1.23 ) f( &v[0] ); 您永远不需要将向量转换为实际的数组实例。 #4楼 做什么的? 您需要澄清:您是否需要指向数组第一个元素或数组的指针? 如果要调用期望使用前者的API函数,则可以执行 do_something(&v[0], v.size()) ,其中 v 是 double s的向量。 向量的元素是连续的。 否则,您只需要复制每个元素: double arr[100]; std::copy(v.begin(), v.end(), arr