8.二维数组和常见排序算法讲解

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.
首先大家要理解,什么是算法。通俗的理解就是为了得到某个结果的一种计算方法,或 者说是一种游戏规则,通过这些不同的规则我们能够获得同样的结果。
其次,要学会简单对2个变量进行交换数值,temp,例如int a= 2;int b = 3;如何将它们交换, 接int a=3;int b=2;不就可以了?不要这么嗨..
Sytt5i.out.[H'iiitln{arr[i])j
public static raid帕inRtrirgdPg[]){ IdSflrlSbrt i sneuInsert^ort[}; i,getIns«rtSopt{);
图比较小,看不清的同学放大文档就可以看清楚了。
有些同学可能会问,为什么第二层循环里,temP变量若不小于arr[j],就会停止这一层
3个数进行比较,插入到他们当中去.以此类推。
如图:
那么如何用java来实现呢?很明显,如此重复的动作,用 少个for循环?我们可以这样思考,在这个过程中,主要有 也就是待比较插入的牌(2)与前面排序好的数值(我们称之为有序数列)进行比较
所以,我们可以用2个for循环来写这个算法:
低乂訂掰曲就1啄河J逼赭从有序飘曲乾峠敦粉嫌懺
希尔排序的玩法是这样的:
先取一个小于n的整数d1作为第一个增量,把文件的全部记录都分组。即所有距离为
d1倍数的都放在同一组中,现在各组内进行“直接插入排序”。然后,取第二个增量d2<d1,重复进行增量为d1时的做法,直到增量为1也就是说所有数都已经放在了同一组中进行排 序之后终止。
通常增量d,取的是数组长度的二分之1.即所a.length/2运算。
的循环。举个列子就明白了,假设有序数列为1 , 5,7加入一个比较数字为8,这个8
相当于待比较的temp变量,本身,1,5,7就是一个从小到大排好序的数列,那么是不是只 要用8与这个数列的最后一位开始比就可以省事了呢?
2.3
希尔排序也是插入排序的一种,可以看作是直接插入排序的优化。为什么说它优化了直接 插入排序,因为希尔排序采用了先分组,再在各组里进行插入排序。
开始)
方式2:int[][] arr=new int[3][];
定义了一个名称为arr的二维数组,定义了3行,但是没有定义列。如果我们用 列的思维去理解,这里就不容易理解了,为什么它可以只定义了行却先不定义列? 里需要用回格子的思维,定义了3个格子,但每个格子里放多大的一维数组先不定义。 就好理解了。
很显然, 我们可以用一维数组, 将3个部门的数据都存到里边。但是这样太杂乱, 难 以区分哪些数据分别输入哪个部门,如果部门有10个,那显然一维数组里的这一堆数据就 更混乱。
所以,我们就需要用二维数组: 定义一个大小为3个二维数组,arr[0]用来存软件部,arr[1]用来存产品部,arr[2]用来 存财务部.那么有同学会问我怎么记得住哪个下标属于什么部门。这个简单,用变量标识 就可以了,例如定义软件的整型变量int ruanJianBu= 0;然后再数组下表中引用它:arr[ruanJianBu]= {2,3,6};这样不就一目了然了么?
如图:
图比较丑,不要嫌弃它 用代码体现出来就是:
arr[O]=new in t[3]; arr[1] = new in t[1];
arr[2] = new in t[2];
方式
第三种方式最为直观,定义了大小为3的二维数组,然后每个格子里放着不同大小的一
维数组。但这种方式比较死板.
1.3
实际开发当中,二维数组主要用于一些简单的小的数据的分类存储 需求:将软件部,产品部,财务部门本月四周的财务数据存到数组里。
以干脆形象一点的理解,二维数组类似于我们画表格的n行n列
1.2.
方式1:in t[][] arr=new int[ 5][2];
定义名称为arr的二维数组,我们简单点理解成5行2列。但果能够理解为大小为5的
一维数组里,每个格子放了一个大小为2的一维数组会更好些,因为有利于对内存的理解。
对第一行的第一个格子赋值的写法为:arr[0][0]=80;(注意,数组的角标依然是从0
1.二维数组
1.1概念
1.2.二维数组的定义
1.3二维数组的应用
2.常见的排序算法
排序算法的分类 直接插入排序.希尔排序
简单选择排序.堆排序
2.1
2.2
2.3
2.4
2.5
2.6冒泡排序
2.7快速排序
.. 9
9
15
16
这次课我们学习数组中的二维数组,和一些常见的排序算法。在理解上不容易理解,希 望大家耐心学习。考验你们逻辑思维的时候到了~~学算法,要冷静中带一点嗨。
同志们,学完了以上章节,java的入门基础语法知识就告一段落了。不知道你们感 触如何呢?如果你坚持完成了每一次的课后练习,相信你已经有所收获~~
接下来, 要跟大家介绍一些常见的排序算法。 算法, 实际项目开发当中其实用的并不多 用,但如果你立志将来往数据分析大牛方向走,还是要从点滴做起,把算法学好。
幅疋械较爛諏跚时瑞聊%虻护皮朋于咗拙徳漩劃
"邁厨鹭芽曲专読测当艇轴剖于訂鹅申濮饨对,晞交翹濡飆輕憔环 感疔離.
"込-镐昶筑注養 耳叩不劭二啊j]眉 型黔止箕二訓钢了,毗謝肚岬辎,転 贮是下标为讯的血因疵恃止仙(护瀚训册r[j][jT2也洎圾了1.
fiar(inti:6ji<drr.length;14^+){
1.
1.1
所谓二维的维,指的是一个“维度”.通俗的讲,如果一维是单一的一条线,那么二维
可以看作是一个面。例如,可以用图来对比一下它们: 一维数组:
1H3
415
6
7
二维数组:
111
b
4
5
16
7
2
Is
4
5
6wenku.baidu.com
7
1 1
2
41
5
61
7
1
2
|3
4
5
6
7
对于二维数组,我们可以理解在一维数组当中,每一个格子里又存了一个一维数组。也可
常见的做法是设置一个中间变量temp,然后
temp=a;
a=b;
b=temp;
这样就达到了两个变量相互交换的效果。 这方式虽然笨拙, 但却最容易看懂, 也谈不上耗 内存资源,开发中经常使用。
我们这里先学习前面3类.已经足够大家折腾了
22
直接插入排序法主要思想类似于玩扑克牌时按从小到大整理牌的过程,第一趟比较最前 面的2个数,排序好。然后第二趟用第三个数与前面排序好的2个数进行比较,进行插入
相关文档
最新文档