为您找到搜索结果:908个
排序学习之---快速排序
快速排序是一种交换排序,它由C.A.R.Hoare在1962年提出。快速排序的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分:分割点左边都是比它小的数,右边都是比它大的数。然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。动态效果示意图:详细的图解往往比大堆的文字更有说明力,所以直接上图:上图中,演示了快速排序的处理过程:初始状态为一组无序的数组:2、4、5、1、3。经过以上操作步骤后,完成了第一次的排序,得到新的数组:1、2、5、4、3。新的数组中,以2为分割点,左边都是比2小的数,右边都是比2大的数。因为2已经在数组中找到了合适的位置,所以不用再动。2左边的数组只有一个元素1,所以显然不用再排序,位置也被确定。(注:这种情况时,left指针和right指针显然是重合的。因此在代码中,我们可以通过设置判定条件left必须小于right,如果不满足,则不用排序了)。而对于2右边的数组5、4、3,设置left指向5,right指向3,开始继续重复图中的一、二、三、四步骤,对新的数组进行排序。python代码#-*-coding...
排序学习之---选择排序
php代码如下在一列数字中,选出最小数与第一个位置的数交换。然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。(以下都是升序排列,即从小到大排列) 举例说明: $arr=array(6,3,8,2,9,1); 第一轮: 第一次比较,第一个数6与(3, 8, 2, 9, 1)中3比较,6大,当前最小数为3,位置为1 第二次比较,最小数字3与(3, 8, 2, 9, 1)中8比较,3小,当前最小数为3,位置为1 第三次比较,最小数字3与(3, 8, 2, 9, 1)中2比较,3大,当前最小数为2,位置为3 第四次比较,最小数字2与(3, 8, 2, 9, 1)中9比较,2小,当前最小数为2,位置为3 第五次比较,最小数字2与(3, 8, 2, 9, 1)中1比较,2大,当前最小数为1,位置为5 ...
排序学习之---插入排序
插入排序:每一趟将一个待排序的记录,按照其关键字的大小插入到有序队列的合适位置里,知道全部插入完成。 在讲解直接插入排序之前,先让我们脑补一下我们打牌的过程。先拿一张5在手里,再摸到一张4,比5小,插到5前面,摸到一张6,嗯,比5大,插到5后面,摸到一张8,比6大,插到6后面,。。。最后一看,我靠,凑到全是同花顺,这下牛逼大了。 以上的过程,其实就是典型的直接插入排序,每次将一个新数据插入到有序队列中的合适位置里。很简单吧,接下来,我们要将这个算法转化为编程语言。假设有一组无序序列 R0,R1,...,RN-1。(1) 我们先将这个序列中下标为 0 的元素视为元素个数为 1 的有序序列。(2) 然后,我们要依次把 R1,R2,...,RN-1 插入到这个有序序列中。所以,我们需要一个外部循环,从下标 1 扫描到 N-1 。(3) 接下来描述插入过程。假设这是要将 Ri 插入到前面有序的...
php四排序-选择排序
原理: 在一列数字中,选出最小数与第一个位置的数交换。然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。(以下都是升序排列,即从小到大排列) 举例说明: $arr=array(6,3,8,2,9,1); 第一轮: 第一次比较,第一个数6与(3, 8, 2, 9, 1)中3比较,6大,当前最小数为3,位置为1 第二次比较,最小数字3与(3, 8, 2, 9, 1)中8比较,3小,当前最小数为3,位置为1 第三次比较,最小数字3与(3, 8, 2, 9, 1)中2比较,3大,当前最小数为2,位置为3 第四次比较,最小数字2与(3, 8, 2, 9, 1)中9比较,2小,当前最小数为2,位置为3 第五次比较,最小数字2与(3, 8, 2, 9, 1)中1比较,2大,当前最小数为1,位置为...
八大排序算法的python实现
#-*-coding:utf-8-*-#冒泡排序defbubble_sort(nums):i=1exchanged=Truewhilei<len(nums)andexchanged:exchanged=Falseforjinrange(len(nums)-i):ifnums[j]>nums[j+1]:nums[j],nums[j+1]=nums[j+1],nums[j]exchanged=Truei+=1returnnums#快速排序defquick_sort(nums,left=0,right=None):ifright==None:right=len(nums)-1ifleft>=right:returnnumslow=lefthigh=rightkey=nums[left]whileleft<right:whileleft<rightandnums[right]>=key:right-=1nums[left],nums[right]=nums[right],nums[left]whileleft<rightandnums[left]<...
点击出现蒙层,然后点击空白地方蒙层消失(阻止冒泡)
要做一个这样的蒙层很简单。但要怎样实现点击除蒙层子节点之外的空白地方蒙层消失呢?思路是: 蒙层添加点击隐藏事件,然后为蒙层子节点的设置阻止冒泡的事件。这样就能达到效果;$("蒙层").click(function(){$(this).hide()})$("蒙层子节点").click(function(e){e.stopPropagation();})简单效果: ...
php 快速排序
functionquickSort(array$array){$len=count($array);if($len<=1){return$array;}$key=$array[0];$left=array();$right=array();for($i=1;$i<$len;$i++){//echo$i.' ';if($array[$i]<$key){$left[]=$array[$i];}else{$right[]=$array[$i];}}$left=quickSort($left);$right=quickSort($right); //这里都是注释var_dump($left);echo'left'.' '."<br>";var_dump(array($key));echo'key'.' '."<br>";var_dump($right);echo'right'.' '."<br>";var_dump(array_merge($left,array...
PHP 冒泡原理
header('Content-Type:text/html;charset=utf-8');//简单冒泡算法$a=array(5,43,3,2,1);functionmp($a){$len=count($a);//传值要是数组for($i=0;$i<$len;$i++){/* *最多做n-1趟排序*i=0i<5i++*这里为什么要-2呢*因为数组是从0开始的所以要-1*然后一比较最后一位和倒数第二位*这是从最后开始与前面的比较*/for($j=$len-1;$j>=$i;$j--){ //j=4j<ij--//这里$j>=$i的原因是:每个数都要进行冒泡运算,匹配之后,运行次数逐渐减少.//判断数组最大的位数和第二大的相比if($a[$j]<$a[$j-1]){echo$a[$j],'------小于-----',$a[$j-1],'----------排列前:',fnsort($a);//如果最大位数的小于第二大位数的就换位置$tmp=$a[$j];$a[$j]=$a[$j-1];$a[$j-1]=$tmp;echo'-----...
C# ObservableCollection集合排序
版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/BYH371256/article/details/83346807注意:ObservableCollection集合直接使用OrderBy等函数排序,有问题的,排序不改变,可以转成List在进行排序命名空间:System.Collections.ObjectModle在WPF中,绑定列表List,数据更新后不会通知界面更新,要使用ObservableCollection集合,当数据发生改变就通知界面改变;解决方法一:List列表转为ObservableCollection集合privateObservableCollection<BaseSignalViewModel>children=newObservableCollection<BaseSignalViewModel>();publicObservableCollection<BaseSignalViewModel>Children{get{returnchildren;}set{children=...
【转】拓扑排序入门
在一个有向图中,对所有的节点进行排序,要求没有一个节点指向它前面的节点。先统计所有节点的入度,对于入度为0的节点就可以分离出来,然后把这个节点指向的节点的入度减一。一直做改操作,直到所有的节点都被分离出来。如果最后不存在入度为0的节点,那就说明有环,不存在拓扑排序,也就是很多题目的无解的情况。下面是算法的演示过程。下面是我以前的写法,比较好理解,但是效率低//b[]为每个点的入度for(i=1;i<=n;i++){for(j=1;j<=n;j++){if(b[j]==0){//找到一个入度为0的点ans=j;vis[cnt++]=j;b[j]--;break;}}for(j=1;j<=n;j++)if(a[ans][j])b[j]--;//与入度为0的点相连的点的入度减一}printf("%d",vis[0]);for(i=1;i<cnt;i++)printf("%d",vis[i]);printf(""); 下面是我现在一直以来的写法,貌似挺快的。queue<int>q;for(inti=0;i<n;i++)//n节点的...
oracle 排序 row_number() over(partition by 排序字段)
业务描述:按t.truckId,t.riskCode分组,每个分组里有分数,取分组中分数最大的那条记录。如:A1B1 5 6 A1 B1 5 3 A1 B2 2 5 A1 B2 2 1已经按A,B分组了但是我需要第一条和第三条数据,就可以用这个row_number()over(partitionby 排序字段)降序然后取rowseq=1的数据就可以拿到了SELECTgg.sumScoreASsumScore,gg.numberRiskASnumberRisk,gg.happenTimeAShappenTimeFROM(SELECTg.sumScoreASsumScore,g.numberRiskASnumberRisk,g.happenTimeAShappenTime,(row_num...
v-for的显示过滤/排序结果
对于v-for列表渲染指令,项目中很常用的额,但是我们一般可能在从后端接口拿到数据的时候就把数据通过循环整理改造成自己想要的样子了。有时候可能对于不同的列表需求,还要在data里多造一份数据。这种做法是非常累赘的。最好的方式是在v-for循环的时候对数据进行操作,从而可以做到维护源数据不变。第一种:计算属性过滤平时可能容易被忽视,在项目中用到的地方可能不是很多,或者常常直接就先整理再v-for了。<body><divid="app"><liv-for="ninevenNum":key="n">{{n}}</li></div></body></html><scripttype="text/javascript">letvm=newVue({el:'#app',data:{num:[1,2,3,4,5]},computed:{evenNum(){returnthis.num.filter(item=>item%2==0)}},methods:{}})</script>第二种:采...
【原创】 PLSQL 索引排序优化
转载请注明出处select/*+INDEX_DESC(TIDX_SYS_MESS_CREATE_DATE)*/*FROMsys_messageTwheret.create_dateisnotnull 索引名:IDX_SYS_MESS_CREATE_DATESQL表别名:T注意点:1、 /*+INDEX_DESC(TIDX_SYS_MESS_CREATE_DATE)*/ 红色字的别名要跟表别名一样 2、一定要加上where所在索引字段 isnotnull 3、数据集(非表)没索引可用 4、 /*+INDEX_DESC(T IDX_SYS_MESS_CREATE_DATE)*/ 加上此句后自动会按照红字关键字排序,无需再加orderby,红字部分也可以改成ASC 按F5执行下,如果...
MR案例:分区和排序
现有一学生成绩数据,格式如下:<学号,姓名,学院,成绩> //<id,name,institute,grade>。需求描述:查询成绩大于等于60分的学生数据,按学院分组,组内按成绩从小到大排序。使用SQL描述:Select*fromtablewheregrade>=60groupbyinstituteorderbygrade;在MR下应该怎么做?1.map阶段选择成绩>=60分的学生。ClassSelectMappermethodmap(LongWritable,Text,InfoWritable,Text){splited[]=value.toString().split(",");InfoWritable=newInfoWritable(splited[2],splited[3]);TextOut=newText(splited[0]+""+splited[1]);if(splited[3]>=60)//选择成绩满足条件的输出context.write(InfoWritable,TextOut)}2.partition阶段按照学生...
Hive中排序和聚集
//五种子句是有严格顺序的:where→groupby→having→orderby→limit//where和having的区别://where是先过滤再分组(对原始数据过滤),where限定聚合函数hive>selectcount(*),agefromteawhereid>18groupbyage;//having是先分组再过滤(对每个组进行过滤,having后只能跟select中已有的列)hive>selectage,count(*)cfromteagroupbyagehavingc>2;//groupby后面没有的列,select后面也绝不能有(聚合函数除外)hive>selectip,sum(load)ascfromlogsgroupbyipsortbycdesclimit5;//distinct关键字返回唯一不同的值(返回age和id均不相同的记录)hive>selectdistinctage,idfromtea;//hive只支持UnionAll,不支持Union//hive的UnionAll相对...