arr

快速排序

时光毁灭记忆、已成空白 提交于 2019-11-26 12:51:27
基础排序:快速排序 算法实现: 在排序数组中选择一个数作为基数(我这里选择数组末尾的数) 根据基数把数组切为三个部分:1.比基数小的在左边;2.比基数大的在右边;3.跟基数相等的在中间 如此分开后,三个小数组整体有序(三个数组只是以下标分开,并不是新建数组) 递归左右两个小数组 最后得到的数组就是有序的 public class QuickSort { private void swap ( int [ ] arr , int i , int j ) { int temp = arr [ i ] ; arr [ i ] = arr [ j ] ; arr [ j ] = temp ; } public void quickSort ( int [ ] arr ) { if ( arr == null || arr . length < 2 ) { return ; } quickSort ( arr , 0 , arr . length - 1 ) ; } private void quickSort ( int [ ] arr , int L , int R ) { if ( L < R ) { int [ ] p = partition ( arr , L , R ) ; //对左边进行递归 quickSort ( arr , L , p [ 0 ] - 1 ) ; /

使用原生js翻转数组

亡梦爱人 提交于 2019-11-26 09:59:32
如下 let arr = [ 'a' , 'b' , 'c' , 'd' ] ; let newArr = [ ] ; for ( var i = 0 ; i < arr . length ; i ++ ) { newArr [ i ] = arr [ arr . length - 1 - i ] } console . log ( arr ) console . log ( newArr ) 来源: https://blog.csdn.net/ciel_2/article/details/98779305

判断是否为数组

徘徊边缘 提交于 2019-11-26 08:50:28
数组对象 js的数组是无类型的:数组元素可以是任意类型,并且同一个数组中的不同元素也可能有不同的类型。数组的元素可以是对象或其他数组,这样就可以创建复杂的数据结构。 通常我们可以用一元运算符typeof来判断js的数据类型,但是对于数组这样一个特殊的对象却只能返回"object" typeof [ 1 , 2 , 3 ] "object" typeof 100 "number" typeof false "boolean" typeof undefined "undefined" typeof NaN "number" typeof function () { } "function" typeof null "object" 判断数组的方法 instanceof instanceof 是一个二元运算符,左边操作数是一个对象,不是的话返回false,右边操作数是一个函数对象或者函数构造器,不是的话返回false。原理是通过判断左操作数的对象的原型链上是否具有右操作数的构造函数的prototype属性。 [ 1 , 2 ] instanceof Array true Array.isArray(arr) 这个ES5新增的一个Array方法,该方法是Array对象的一个静态函数,用来判断一个对象是不是数组。 Array . isArray ([ 1 , 2 ]) true

Java--堆排序

北城以北 提交于 2019-11-26 03:38:54
1.堆排序 1)堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏、最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。 2)堆是具有一下性质的完全二叉树:每个结点的值都大于或等于其左右子节点的值,称为大顶锥,没有要求左子节点和右子节点的值的大小关系。 3)每个结点的值都小于或等于其左右子节点的值 4)一般升序采用大顶堆,降序采用小顶堆 2.基本思想 1)将待排序序列构造成一个大顶堆 2)此时,整个序列的最大值就是堆顶的根结点 3)将其与末尾元素进行交换,此时末尾就是最大值 4)然后将剩余n-1个元素重新构造成一个堆,这样会得到n个元素的次次小值。如此反复执行,便能得到一个有序序列了 3.图解 {4,6,8,5,9},要求使用堆排序法,将数组升序排序。 步骤一、构造初始堆,将给定无序序列构造成一个大顶堆。 步骤二、将堆顶元素与末尾元素进行交换,使末尾元素最大。然后继续调整堆,再将堆顶元素与末尾元素交换,得到第二大元素,如此反复进行交换、重建、交换。 import java . text . SimpleDateFormat ; import java . util . Arrays ; import java . util . Date ; public class HeapSort { public static void main (

Java洗牌

我怕爱的太早我们不能终老 提交于 2019-11-26 03:13:26
输入第一行表示组数, 第二行输入N,K 每一组2*N+1张牌,操作K次,输出序列按照从上到下。 操作含义:把一组牌分为两等分,左手一份右手一份,右手先出最后一张牌,左手再出最后一张牌,一次循坏,直到出完牌。 输出需注意:行末数据不能留空格,所以需要和前面数据分开打印。 知识点:用到list来调换数组中元素顺序并暂存,最后在挪到原数组中。 import java.util.ArrayList; import java.util.Scanner; public class WashCard { //数的范围自己无须做特殊处理,表示测试用例会那样做 public static void main(String[] args) { Scanner in=new Scanner(System.in); int T=in.nextInt();//数据组数 for(int i=0;i<T;i++){ int n=in.nextInt(); int k=in.nextInt(); int[] arr=new int[2*n]; for(int j=0;j<2*n;j++){ arr[j]=in.nextInt(); } //反转K次 for(int times=0;times<k;times++){//操作K次 getRes(arr,arr.length);//操作一次 } for(int a=0

Java洗牌

让人想犯罪 __ 提交于 2019-11-26 02:57:22
输入第一行表示组数, 第二行输入N,K 每一组2*N+1张牌,操作K次,输出序列按照从上到下。 操作含义:把一组牌分为两等分,左手一份右手一份,右手先出最后一张牌,左手再出最后一张牌,一次循坏,直到出完牌。 输出需注意:行末数据不能留空格,所以需要和前面数据分开打印。 知识点:用到list来调换数组中元素顺序并暂存,最后在挪到原数组中。 import java.util.ArrayList; import java.util.Scanner; public class WashCard { //数的范围自己无须做特殊处理,表示测试用例会那样做 public static void main(String[] args) { Scanner in=new Scanner(System.in); int T=in.nextInt();//数据组数 for(int i=0;i<T;i++){ int n=in.nextInt(); int k=in.nextInt(); int[] arr=new int[2*n]; for(int j=0;j<2*n;j++){ arr[j]=in.nextInt(); } //反转K次 for(int times=0;times<k;times++){//操作K次 getRes(arr,arr.length);//操作一次 } for(int a=0

python扩展数组行列数

元气小坏坏 提交于 2019-11-25 22:35:54
对比两种方法,一种是开辟新的空间,将两个数组拼接起来,使数组变长,另一种使用numpy扩展 首先定义两个数组,都reshape成只有一列 arr = np.array([[1,1,1,4], [4,5,5,7]]) arr = arr.reshape((8,1)) arr1 = np.array([[2,1,1,4], [4,5,5,7]]) arr1 = arr1.reshape((8,1)) 开辟新数组拼接两个数组 t0 = time.clock() result = np.zeros((16,1)) result[:8][:] = arr result[8:][:] = arr1 t1 = time.clock() 使用numpy扩展 arr2 = np.row_stack((arr,arr1)) t2 = time.clock() 对比两个方法使用的时间 print(t1 - t0) print(t2 - t1) 结果是直接拼接数组时间比较快,可能是用空间换时间吧,而且数组访问的时间复杂度为O(1) 记录一下 参考链接 来源: CSDN 作者: 安之ccy 链接: https://blog.csdn.net/qq_43523725/article/details/103236795

JAVA---数组

你说的曾经没有我的故事 提交于 2019-11-25 21:06:54
1、 数组:是一种用于存储多个相同类型数据的存储模型 int arr[] ;//表示 定义一个整型变量 ,变量为arr[] int []arr;//表示定义一个整型数组,数组名为arr 定义格式:(推荐方式) 数据类型[] 数组名; 举例:int[] arr; 数组初始化: A:所谓初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值 B:数组初始化 动态初始化 静态初始化 动态初始化: 初始化时只指定数组长度,由系统为数组分配初始值 格式:数据类型[] 变量名 = new 数据类型[数组长度]; 范例:int[] arr = new int[3]; */ public class ArrayDemo1 { public static void main(String[] args) { int[] arr = new int[3]; /* 左边: int:说明数组中的元素类型是int类型 []:说明这是一个数组 arr:这是数组的名称 右边: new:为数组申请内存空间 int:说明数组中的元素类型是int类型 []:说明这是一个数组 3:数组长度,其实就是数组中的元素个数 */ //输出数组名 System.out.println(arr); //会分配一个地址 //输出数组中的元素 System.out.println(arr[0]); System.out

Java基础(五)基础语法

一曲冷凌霜 提交于 2019-11-25 19:48:37
Java中的方法 方法的定义 修饰符 返回值类型 方法名(参数类型 参数名){ … 方法体 … return 返回值; } 方法的调用 方法的重载(Overload) 方法的名称完全相同,只是参数的个数、类型不同或参数顺序不同就是方法的重载。 和返回值类型没有关系 递归 自己调用自己,前提条件必须有终止条件 数组 数组可以存放任意类型的元素,但同一个数组里存放的元素类型必须一致。 Java数组的特征: 1、Java是强类型语言:一个数组里只能存储一种数据类型的数据 2、Java语言是静态的:Java中的数组一旦被初始化后,它的长度是固定的。 3.、数组是引用数据类型。 IDEA快捷键 //iter增强型for循环快捷键 //itar普通for循环遍历快捷键 查看快捷键Ctrl+J 数组初始化概述: Java中的数组必须先初始化,然后才能使用 所谓初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值 数组的初始化方式 动态初始化:初始化时只指定数组长度,由系统为数组分配初始值。 静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度 动态初始化:初始化时只指定数组长度,由系统为数组分配初始值 格式:数据类型[] 数组名 = new 数据类型[数组长度]; 数组长度其实就是数组中元素的个数。 举例:int[] arr = new int[3]; 解释