4.数组和排序算法1

Jeknight Jeknight     2022-09-01     577

关键词:

1. 数组的定义

一组相关变量的集合

一个数组实际上就是一连串的变量

数组中的变量必须是相同的数据类型

数组可以分为一维数组、二维数组和多维数组

例如:numbers[100]来代替直接声明100个独立变量number0,number1,....,number99


2. 一维数组

2.1 数组的声明

两种声明方式:

数据类型[] 数组名  //首选
数据类型 数组名[]  //效果相同,C语言的格式,不推荐

举例:

int[] myList    //推荐
int myList[]    //不推荐

2.2 数组的初始化

2.2.1 动态初始化

数组定义与为数组分配空间和赋值的操作分开进行

数组名 = new 数组类型[数组大小]

例如:

myList  = new int[10];

2.2.2 静态初始化

在定义数组的同时就为数组元素分配空间并赋值

数组名 = {元素1,元素2,元素3,….}

数组名 = 数组类型[]{元素1,元素2,元素3,….}

例如:

int[] a = {1,2,3,4};
int[] a = new int[]{1,2,3,4};

2.2.3 错误的初始化

int[] month_days = new int[12];
month_days = {31,28,31,30,31,30,31,31,30,31,30,31}; 

注意:只能在数组声明时用大括号对来自定义数据,否则只能分别对每个下标元素进行赋值

int[] month_days = new int[12];
month_days[0] = 31;
month_days[1] = 28;
    ……  

2.3 一维数组练习和实践

1、数组名表示什么?

2、arr[0]表示什么?

3、怎么获取数组长度?

4、如何使用数组下标取值?

5、如何使用数组遍历取值 for & foreach ?

6、如何给数组所有元素求和?

7、如何找出数组种最大值,最小值?

8、数组的深复制,浅复制有何不同?

9、练习:一个班有10个同学的数学成绩需要记录,要计算班级成绩总和,平均成绩,最高分,最低分,及格人数等数据。

    int[] studentScores = { 55, 66, 77, 88, 35, 89, 90, 52, 22, 76 };

    int studentScores[] = { 55, 66, 77, 88, 35, 89, 90, 52, 22, 76 };

3. 二位数组

3.1 声明与初始化

3.1.1 声明

int[][] a;  //推荐
int a[][];  //不推荐   

3.1.2 初始化

  1. 动态初始化

    数据类型[][] 数组名称 = new 数据类型 [行数][列数] ;
    

    例如:

    int [][] num = new int [3][3]; //定义了三行三列的二维数组  
    num[0][0] = 1; //给第一行第一个元素赋值  
    num[0][1] = 2; //给第一行第二个元素赋值  
    num[0][2] = 3; //给第一行第三个元素赋值  
    
    num[1][0] = 4; //给第二行第一个元素赋值  
    num[1][1] = 5; //给第二行第二个元素赋值  
    num[1][2] = 6; //给第二行第三个元素赋值  
    
    num[2][0] = 7; //给第三行第一个元素赋值  
    num[2][1] = 8; //给第三行第二个元素赋值  
    num[2][2] = 9; //给第三行第三个元素赋值 
    
  2. 静态初始化

    数据类型 [][] 数组名称 = {{第一行元素},{第二行元素},...} ;  
    数据类型 [][] 数组名称 = new 数组类型{{第一行元素},{第二行元素},...} ; 
    

    例如:

    int[][] num = {{1,2,3},{4,5,6},{7,8,9}};
    int[][] num = new int[][]{{1,2,3},{4,5,6},{7,8,9}};
    

二维数组其实就是矩阵

3.2 二维数组练习

案列:某校幼儿园有3个班,每个班有5个人,计算各班平均年龄?计算全园平均年龄?计算总人数?

    int students[][] = { { 3, 6, 4, 5, 4 }, { 2, 3, 5, 3, 2 }, { 3, 4, 6, 2, 4 } };

    int[][] students = { { 3, 6, 4, 5, 4 }, { 2, 3, 5, 3, 2 }, { 3, 4, 6, 2, 4 } };

4. 排序算法

4.1 冒泡排序(必须掌握)

 

算法(第4版)-2.1初级排序算法

...和交换的数量。对于不交换元素的算法,我们会计算访问数组的次数。 2.·原地排序算法:除了函数调用所需的栈和固定数目的实例变量之外无需额外内存的原地排序算法;·其他排序算法:需要额外内存空间来储存另一份数... 查看详情

算法归并排序小和问题

...2.小和问题归并排序的扩展小和问题和逆序对问题在一个数组中,每一个数左边比当前数小的数累加起来,叫做这个数组的小和。求一个数组的小和。例子:[1,3,4,2,5]1左边比1小的数,没有;3左边比3小的数,1;4左边比4小的数,1、3; 查看详情

数组各种排序算法和复杂度分析

 Java排序算法1)分类:1)插入排序(直接插入排序、希尔排序)2)交换排序(冒泡排序、快速排序)3)选择排序(直接选择排序、堆排序)4)归并排序5)分配排序(箱排序、基数排序)所需辅助空间最多:归并排序所需... 查看详情

数据结构-数组数组的相关算法(代码片段)

文章目录1无序数组的排序——快速排序1.1升序排序1.2降序排序2有序数组的查找——折半查找(二分查找)2.1升序数组的查找2.2降序数组的查找3有序数组的合并——归并思想3.1归并两个升序数组3.2归并两个降序数组3.3升... 查看详情

算法浅谈——分治算法与归并快速排序(附代码和动图演示)(代码片段)

...并排序的思路其实很简单,说白了只有一句话:两个有序数组归并的复杂度是(O(n))。我们举个例子:a=[1,4,6]b=[2,4,5]c=[]我们用i和j分别表示a和b两个数组的下标,c表示归并之后的数组,显然一开始的时候i,j=0,0。我们不停地比较a和b... 查看详情

自己整理的算法希尔排序

...:根据需求,如果你想要结果从小到大排列,它会首先将数组进行分组,然后将较大值移到前面,较小值*移到后面,最后将整个数组进行插入排序,这样比起一开始就用插入排序减少了数据交换和移动的次数,可以说希尔排序是... 查看详情

排序算法——选择排序

...方法会遍历(N2)/2:每次抽一位最小数或者最大数放在数组头部。再遍历抽取剩下的数组最小数如下所示:原数组:9,8,7,6,5,4,3,2,1第一轮:1,8,7,6,5,4,3,2,9第二轮:1,2,7,6,5,4,3,8,9第三轮:1,2,3... 查看详情

在一个n个整数数组里面,有多个奇数和偶数,设计一个排序算法,令所有的奇数都在左边。

//在一个N个整数数组里面,有多个奇数和偶数,设计一个排序算法,令所有的奇数都在左边。 //例如:当输入a={8,4,1,6,7,4,9,6,4}, //a={1,7,9,8,4,6,4,6,4}为一种满足条件的排序结果usingSystem;namespaceSuanFa{classProgram{//在一个N个整数... 查看详情

常见查找和排序算法

...较慢。改进:在表尾设置一个岗哨,这样不用去循环判断数组下标是否越界,因为最后必然成立。适用条件:二分查找的判定树不仅是二叉排序树,而且是一棵理想平衡树。时间复杂度为O(lbn)。循环实现递归实现待排序的元素需... 查看详情

排序算法——归并排序

归并排序遵循分治原则先将数组不断的递归二分打散,打散后再进行二二组合。原理如下数组:分[1,2,3,4,5,6,7,8]分[1,2,3,4],[5,6,7,8]分[1,2],[3,4],[5,6],[7,8]分[1],[2],[3],[4],[5],[6],[7],[8]治:[2,1],[4,3],6,5],[8,7]治:[4,3,2,1],[8,7,6,5]治:[8,7,6,5,4,3,... 查看详情

算法(第4版)-2.2归并排序

归并:将两个有序的数组归并成一个更大的有序数组。 归并算法:先(递归地)将它分为两半分别排序,然后将结果归并起来。·优点:保证将任意长度为N的数组排序所需时间和NlogN成正比;·缺点:所需的额外空间和N成正... 查看详情

java实现对树形结构(文件夹式)数据数组进行排序

...表(没有具体说明的话,这里应该指的是单向链表吧)、数组和二叉树,这几个之中,那排序和查找的数据就看用什么算法和相应的数据结构配合了~~~排序算法中,快速排序是最快的,比较适合用链表来处理,但是链表的查找是... 查看详情

排序算法:插入排序(代码片段)

要点 基本思想:就是把一个新的元素插入已排好序的数组形成一个新的已排好序的数组(比方说:有一个数组是1,3,4,6,8 现在要将“2”插入到数组中,那么插入位置就是“1”和“3”之间,形成一个新的... 查看详情

常用排序算法总结(代码片段)

...2.1冒泡排序2.1.1算法思想2.1.2算法描述2.1.3算法实现(1)数组线性表(2)链式线性表2.1.4算法分析2.2排序2.2.1算法思想2.2.2算法描述2.2.3算法实现2.3插入排序2.3.1算法思想2.3.2算法描述2.3.3算法实现2.3.4算法分析2.4希尔排序2.4.1算法思... 查看详情

排序算法和查找算法

...例:分别用冒泡排序,快速排序,选择排序,插入排序将数组中的值从小到大的顺序排序$array=(9,5,1,3,6,4,8,7,2);1、冒泡排序算法//思路:两两比较待排序数据元素的大小,发现两个数据元素的次序相反即进行交换,直到没有反序的... 查看详情

冒泡排序算法以及它的优化方案(代码片段)

...章重点应该放在优化上面。二、冒泡排序的实现思想:将数组里面相邻的元素两两比较,根据大小来交换元素位置,举个栗子:这里有一个数组array[4,6,5,8,9,3,2,1,7],首先4和6比较,4小于6,位置不变,接下来6和5比较,6大于5,所... 查看详情

算法按频率高低来进行排序

题目:设计一种排序方法,安装元素的频率对数组进行排序,频率高的在前,频率相同的元素按照原来的顺序排列。比如:数组inta[19]={1,2,2,3,3,3,4,4,5,5,5,5,6,6,6,7,8,9,10},输出:{5,5,5,5,3,3,3,6,6,6,2,2,4,4,1,7,8,9,10};思路:可以将数组1中的... 查看详情

数据结构和算法总结

...、数据结构1、栈先进后出、后进先出2、队列先进先出3、数组连续的空间、有索引4、链表(1)单链表(2)双链表(3)循环链表5、树结构(1)普通二叉树(2)二叉搜索树(3)平衡... 查看详情