arr

排序算法

落爺英雄遲暮 提交于 2020-02-11 04:13:56
<?php header("content-type:text/html;charset=utf-8"); $arr = array(3,5,8,4,9,6,1,7,2); echo implode(" ",$arr)."<br/>"; //--------------------------------------- // 常用排序算法 //--------------------------------------- //冒泡 function BubbleSort($arr) { $len=count($arr); //设置一个空数组 用来接收冒出来的泡 //该层循环控制 需要冒泡的轮数 for($i=1;$i<$len;$i++) { //该层循环用来控制每轮 冒出一个数 需要比较的次数 for($k=0;$k<$len-$i;$k++) { if($arr[$k]>$arr[$k+1]) { $tmp=$arr[$k+1]; $arr[$k+1]=$arr[$k]; $arr[$k]=$tmp; } } } return $arr; } echo '冒泡排序:'; echo implode(' ',BubbleSort($arr))."<br/>"; //快速排序 function QSort($arr) { //先判断是否需要继续进行 $length = count(

数组

好久不见. 提交于 2020-02-10 18:40:08
数组的介绍 数组动态初始化:int[] arr=new int[5]; 数组静态初始化: int[] arr=new int[]{10,20,30,40,50}; 数组与排序 数组遍历:for(i=0;i<arr.length-1;i++){} 数组反向遍历:for(i=arr.length-1;i>=0;i–){} 获取数组中元素的最大值与最小值: for(i=0;i<arr.length-1;i++){ if(arr[i]<max) max=arr[i] } for(i=0;i<arr.length-1;i++){ if(arr[i]>min) min=arr[i] } 数组元素的反转: for(i=0;i<arr.length/2;i++){ int t=arr[i]; arr[i]=arr[arr.length-1-i]; arr[arr.length-1-i]=t; } 二维数组 静态初始化:int[][] arr=new int [][]{{20,20},{20,20},{100,19}}; 二维数组遍历: for(i=0;i<arr.length;i++){ for(j=0;j<arr[i].length;j++){ System.out.println(arr[i][j]); } } 二维数组练习: 打印杨辉三角形 1 1 1 1 2 1 1 3 3 1 1 4 6

归并排序

本秂侑毒 提交于 2020-02-10 17:44:43
归并排序 将给定的包含n个元素的局部数组“分割”为俩个局部数组,每个数组包含 n/2 个元素。 对两个局部数组分别进行归并排序。 通过归并把两个已经排序的局部数组“整合”成一个数组。 举例:以 a = [9,6,7,2,5,1,8,4,2]进行归并排序 注:红色数字代表执行顺序。 代码: import java . util . Arrays ; public class MergeSort { public static void mergeSort ( int [ ] arr , int left , int right ) { //直到分割到单个元素,停止分割 if ( left + 1 < right ) { int mid = ( left + right ) / 2 ; //分割为2个数组 mergeSort ( arr , left , mid ) ; mergeSort ( arr , mid , right ) ; //合并2个数组 merge ( arr , left , mid , right ) ; } } public static void merge ( int [ ] arr , int left , int mid , int right ) { //申请额外空间存储排序结果 int [ ] result = new int [ right -

迷宫问题

天涯浪子 提交于 2020-02-09 17:30:18
递归负责寻找路的尽头,退出的条件是 找到。 如果没找到一直向后走,递归找,或者说路都走过了,也是返回false package a; import java.util.Arrays; public class Maze { public static void main(String[] args) { int [][] arr = new int[8][7]; for (int i = 0; i < arr[0].length; i++) { arr[0][i] =1; arr[7][i] =1; } for (int i = 0; i < arr.length; i++) { arr[i][0]=1; arr[i][6]=1; } arr[toIndex(4)][toIndex(2)] = 1; arr[toIndex(4)][toIndex(3)] = 1; for (int[] e : arr) { for (int it : e) { System.out.print(it+" "); } System.out.println(); } boolean res = way(arr, 1, 1); System.out.println("res = " + res); for (int[] e : arr) { for (int it : e) { System.out

第一次个人编程作业

廉价感情. 提交于 2020-02-09 14:10:12
这个作业属于哪个课程 软件工程 这个作业要求在哪里 第一次个人编程作业 这个作业的目标 中文语言编译器 作业正文 如下 其他参考文献 无 GitHub链接 ( https://github.com/xiao-ming6/sofeware-engineering ) 记录 代码行数 约240行 分析时间 1h+ 编码时间 一天 思路 首先写关于 汉字与int类型之间互换 的函数(changeOne类是汉字转为int,changeTwo类是int转为汉字,zhongwen类写主函数),并进行 测试 ,验证确保可以后再进行主函数的编写,先确保运算中数字的准确性。 而后开始 主函数的编写 先是输入问题,用while (!(a = in.nextLine()).equals(""))进行循环,当 输入为空时则退出 。 后将语句分隔开,再根据语句输入的特点进行分类处理。 if (arr[0].equals("整数")) else if (arr[1].equals("增加")) else if (arr[1].equals("减少")) else if (arr[0].equals("看看")) else if (arr[0].equals("如果")) 当等于时,以 键值对方式(key,value) 对数据进行存储(Map<String, Integer> maps = new

leetcode1343

霸气de小男生 提交于 2020-02-09 09:42:15
1 class Solution: 2 def numOfSubarrays(self, arr: List[int], k: int, threshold: int) -> int: 3 n = len(arr) 4 count = 0 5 sums = sum(arr[:k]) 6 avg = sums // k 7 if avg >= threshold: 8 count += 1 9 i,j = 0,k-1 10 while i <= j and j < n-1: 11 j += 1 12 sums += arr[j] 13 sums -= arr[i] 14 i += 1 15 avg = sums // k 16 if avg >= threshold: 17 count += 1 18 return count 算法思路:滑动窗口,双指针。 计算窗口内部的平均值,与阈值比较。 来源: https://www.cnblogs.com/asenyang/p/12286202.html

排序之希尔排序(JS)

孤人 提交于 2020-02-09 05:25:30
  希尔排序(Shell's Sort)是 插入排序 的一种又称“ 缩小增量排序 ”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因D.L.Shell于1959年提出而得名。   希尔排序是基于插入排序的以下两点性质而提出改进方法的: 插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率。 但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位。 为更加清晰地说明该排序,贴一张其它地方转载而来的图片 /* * 希尔排序 时间复杂度 o(nlog2n). * 开始时针对无序序列,步长大,交换速度有提升,当数组基本有序的时候,步长少,交换次数少,速度快 */ //不使用temp,交换数据信息 function swap(arr,i,j){ arr[i]=arr[i]+arr[j]; arr[j]=arr[i]-arr[j]; arr[i]=arr[i]-arr[j]; return arr; } //希尔排序,自组采用直接插入排序 针对有序序列在插入时采用交换法 function shellSort(arr){ //逐步降低步长直至为1为止 for(let shellWidth = arr.length/2;shellWidth>0;shellWidth/2){ /

图解排序算法(三)之堆排序

邮差的信 提交于 2020-02-08 23:14:47
预备知识 堆排序   堆排序是利用 堆 这种数据结构而设计的一种排序算法,堆排序是一种 选择排序, 它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。 堆    堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。如下图: 同时,我们对堆中的结点按层进行编号,将这种逻辑结构映射到数组中就是下面这个样子 该数组从逻辑上讲就是一个堆结构,我们用简单的公式来描述一下堆的定义就是: 大顶堆:arr[i] >= arr[2i+1] && arr[i] >= arr[2i+2] 小顶堆:arr[i] <= arr[2i+1] && arr[i] <= arr[2i+2] ok,了解了这些定义。接下来,我们来看看堆排序的基本思想及基本步骤: 堆排序基本思想及步骤    堆排序的基本思想是:将待排序序列构造成一个大顶堆,此时,整个序列的最大值就是堆顶的根节点。将其与末尾元素进行交换,此时末尾就为最大值。然后将剩余n-1个元素重新构造成一个堆,这样会得到n个元素的次小值。如此反复执行,便能得到一个有序序列了 步骤一 构造初始堆。将给定无序序列构造成一个大顶堆(一般升序采用大顶堆,降序采用小顶堆)。   a.假设给定无序序列结构如下 2

常用算法之----堆排序

喜欢而已 提交于 2020-02-08 22:58:34
预备知识 堆排序   堆排序是利用 堆 这种数据结构而设计的一种排序算法,堆排序是一种 选择排序, 它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。 堆    堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。如下图: 同时,我们对堆中的结点按层进行编号,将这种逻辑结构映射到数组中就是下面这个样子 该数组从逻辑上讲就是一个堆结构,我们用简单的公式来描述一下堆的定义就是: 大顶堆:arr[i] >= arr[2i+1] && arr[i] >= arr[2i+2] 小顶堆:arr[i] <= arr[2i+1] && arr[i] <= arr[2i+2] ok,了解了这些定义。接下来,我们来看看堆排序的基本思想及基本步骤: 堆排序基本思想及步骤    堆排序的基本思想是:将待排序序列构造成一个大顶堆,此时,整个序列的最大值就是堆顶的根节点。将其与末尾元素进行交换,此时末尾就为最大值。然后将剩余n-1个元素重新构造成一个堆,这样会得到n个元素的次小值。如此反复执行,便能得到一个有序序列了 步骤一 构造初始堆。将给定无序序列构造成一个大顶堆(一般升序采用大顶堆,降序采用小顶堆)。   a.假设给定无序序列结构如下 2

JavaScript高阶函数map/reduce、filter和sort

痞子三分冷 提交于 2020-02-08 21:28:44
map() 举例说明,比如我们有一个函数f(x)=x²,要把这个函数作用在一个数组[1,2,3,4,5,6,7,8,9]上。 由于map()方法定义在JavaScript的Array中,我们调用Array的map()方法,传入我们自己的函数,就得到了一个新的Array作为结果:   function pow(x) { return x*x; } var arr = [1,2,3,4,5,6,7,8,9]; arr.map(pow);//[1,4,9,16,25,36,49,64,81] map()传入的参数是pow,即函数对象本身。 map()作为高阶函数,事实上它把运算规则抽象了,因为,我们不但可以计算简单的f(x)=x²,还可以计算任意复杂的函数,比如Array的所有数字转为字符串:   var arr = [1,2,3,4,5,6,7,8,9]; arr.map(String);//['1','2','3','4','5','6','7','8','9'] //只需要一行代码 reduce() 再看reduce的用法,Array的reduce()把一个函数作用在这个Array的[x1,x2,x3……]上。这个函数必须接收两个参数,reduce()把结果继续和序列的下一个元素做积累计算,其效果就是 [x1,x2,x3,x4].reduce(f) = f(f(f(x1,x2)