声明:由于学习环境为JDK1.8,所有有关Java的代码均在JDK1.8环境中测试通过,若环境发生变换,代码可能会发生错误。

    本周的学习难度较上周有明显提升,今天所学习的排序算法有很多需要理解的地方,今后还需多加练习和使用。

一:数组拷贝

System类中有一个静态方法:

public static native void arraycopy(Object src, int  srcPos,  Object  dest,  int  destPos,  int  length);

上面的参数意思依次为:源数组,源数组的起始位置,目标数组,目标数组的起始位置,拷贝的数组元素个数

课堂练习:

package copy;
public class ArrayCopy {
public static void main(String[] args) {
        int[] a={1,2,3,4,5,6,7,8,9};
        int[] b={11,22,33,44,55,66,77,88,99};
        System.arraycopy(a,1,b,4,3);
        System.out.println("复制后的数组:");
        for (int i = 0; i < b.length; i++) {
System.out.print(b[i]+"  ");
}
}
}

运行结果:

二:排序算法

1.冒泡排序:共有n个数据,则需要进行n-1趟排序(可优化),每一趟排序都会通过“两两交换”的方式对数据进行比                          较,每一趟排序后都会将本趟排序的最大值“冒”到后面。

课堂练习:

package com.abc;
public class BubbleSort {
public static void main(String[] args) {
int[] a={55,33,22,66,11,88,44,99,77};
bubbleSort(a);
}
public static void bubbleSort(int[] a){
for(int i=1;i<=a.length-1;i++){
for(int j=0;j<a.length-i;j++){
if(a[j+1]<a[j]){
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
System.out.println("第"+i+"次交换,结果是");
for(int x:a){
System.out.print(x+"  ");
}
System.out.println();
}
}
}

运行结果:

2. 插入排序:对一个有n个元素的数据序列,排序需要进行n-1趟插入操作(可优化)。
                      第一趟插入将第2个元素插入前面的有序子序列(此时前面只有一个元素)。
                      第二趟插入将第3个元素插入前面的有序子序列,前面两个元素是有序的。
                      第n-1趟插入将第n个元素插入前面的有序子序列,前面n-1个元素是有序的。

课堂练习:

package com.abc;
public class InsertSort {
public static void main(String[] args) {
int[] a={44,33,77,66,11,99,88,55};
insertSort(a);
System.out.println("排序后的结果是:");
for(int i=0;i<a.length;i++){
System.out.print(a[i]+"  ");
}
}
public static void insertSort(int[] a){
for(int i=1;i<=a.length-1;i++){
int data=a[i];
int j=i-1;
while(j>=0 && data<a[j]){
a[j+1]=a[j];
j--;
}
a[j+1]=data;
}
}
}

运行结果:

3. 快速排序:从待排序的数据序列中任取一个数据(如第一个数据)作为分界值,所有比它小的数据元素放到左边,所                         有比它大的数据元素放到它的右边。
                      接下来,对左右两个子序列按照上述方法进行递归排序,直到排序完成。

课堂练习:

package com.abc;
public class QuickSort {
public static void main(String[] args) {
int[] a={33,44,11,66,55,99,22};
quickSort(a,0,a.length-1);
for(int i=0;i<=a.length-1;i++){
System.out.print(a[i]+"  ");
}
}
public static void quickSort(int[] array,int start,int end){
if(end<=start){
return;
}
int data=array[start];
int i=start+1;
int j=end;
while(true){
while(i<=end && array[i]<=data){
i++;
}
while(j>=start+1 && array[j]>=data){
j--;
}
if(j>i){
int temp=array[i];
array[i]=array[j];
array[j]=temp;
}
else{
break;
}
}
array[start]=array[j];
array[j]=data;
quickSort(array,start,j-1);
quickSort(array,j+1,end);
}
}

运行结果:

三:二维数组

1.二维数组的声明与实例化数据类型[][] 数组名称=new 数据类型[行的个数][列的个数];
    注意:二维数组的length属性就是它所包含的“行的个数”。
    二维数组访问具体元素的语法:  数组名称[行的索引][列的索引]

eg.String[][] array=new String[4][3];
array[0][0]="风清扬";
array[0][1]="孙武";
array[0][2]="曼施坦因";
array[1][0]="马云";
array[1][1]="猪八戒";
array[2][0]="王健林";
array[2][1]="小王子";
array[3][2]="扫地僧";

声明了一个4行3列的二维数组,其中数组各个位置的元素如上,未被实例化的位置将被置为null

2.二维数组的静态初始化
    数据类型[][] 数组名称={
                            {元素1,元素2,....},
                            {元素1,元素2,....},
                             ...
                            };

eg.
String[][] array={

{"Apple","Orange","Banana"},
{"Dog","Cat"},
{"Phone","Machine","Book","Java","兵法"}

}

这样声明的数组元素固定,每行的长度互相不受影响

Java学习第二周(2)--排序算法与二维数组相关推荐

  1. java学习第二周周记

    JAVA学习第二周周记 **day1.**流程控制语句 ,跳转控制语句 **day2.**什么是方法?方法的重载 **day3.**数组,栈和队列 **day4.**冒泡排序及对象的引入 **day5 ...

  2. mysql日期排序YMD_php将二维数组按日期(支持Ymd和Ynj格式日期)排序

    思路: 将所有日期转化成时间戳保存在新数组里面(新数组1和新数组2), 将新数组2排序, 再将新数组2中的元素逐个查找在数组1中的索引, 根据索引将原始数组重新排序, 最终得到排序后的二维数组. - ...

  3. 【数据结构与算法】二维数组中的查找(剑指offer)java版

    在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 分析 ...

  4. java多维数组按照某一列排序,PHP实现二维数组按某列进行排序的方法

    本文实例讲述了PHP实现二维数组按某列进行排序的方法.分享给大家供大家参考,具体如下: /* * 二维数组 按某列排序 * array_multisort($arr1,$arr2) * 手册 例子如下 ...

  5. php 按key大小排序,PHP实现二维数组根据key进行排序的方法

    本文实例讲述了PHP实现二维数组根据key进行排序的方法.分享给大家供大家参考,具体如下: 在PHP中内置了很多对数组进行处理的函数,有很多时候我们直接使用其内置函数就能达到我们的需求,得到我们所想要 ...

  6. Java学习---第二周周报

    第二周周报 收获 关于第一周知识的查漏补缺 JDK,JRE,JVM 分别是什么,彼此之间的关系是怎么样的? JDK为Java语言的软件开发工具包,是整个Java的核心:包含JRE和JVM JVM是Ja ...

  7. 滴滴面试算法-----有序二维数组查找

    题目如下: /**** 1,2,3* 4,5,6* 7,8,9有一个二位数组,从左到右,从上到下,都是有序的递增数组写一个算法 判断给定数组有没有在这个二位数组里提示:从左下角或者右上角开始找*/ 解 ...

  8. Java学习第二周总结

    1.位运算符 1.1位运算符: 针对多个数据进行操作(使用"补码"计算结果)计算出来的结果是具体的数据值; 1)基本的位运算符:位与&: 有0,则0位或|: 有1,则1位异 ...

  9. 二维数组按行排序C语言,二维数组对每一行进行排序。。

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 这是我的代码..问题出在换行的时候sum[i][j]的值还保存着上一行的值.. #include "stdafx.h" #includ ...

最新文章

  1. Windows下的网卡Teaming
  2. mybatis框架--学习笔记(下)
  3. 在Ubuntu下安装Bazaar
  4. java中system_《java中System类》 | 学步园
  5. Oracle死锁解决常用方法
  6. requests与bs4编码
  7. zookeeper之理论基础
  8. javascript 正则表达式小案例
  9. Linux 上免费的视频转换器FFmpeg
  10. mysql优化(关联查询优化)
  11. UWP 如何访问本地代理
  12. matlab从Onshape中导入CAD模型
  13. 水星如何设置虚拟机服务器,水星mercury路由器电脑怎么设置?
  14. client-go实战之二:RESTClient
  15. 征途mysql启动不了_征途单机版架设中场景服务器启动失败?这是为什么?
  16. 百分位(percentile)是什么概念?怎么理解第95个百分位(95th percentile)
  17. 2022-2028全球与中国无线电源接收器市场现状及未来发展趋势
  18. What are default and maximum values of dev_loss_tmo in Red Hat Enterprise Linux 6
  19. 【clswindow框架应用】自动移动鼠标避免锁屏,鼠标随机移动防止锁屏、待机、休眠
  20. ORA-02292_主表在有子表外键约束的情况,如何快速批量删除和插入数据?

热门文章

  1. 超年轻!34岁教授,任985王牌学院副院长!
  2. CTS fail 问题总结
  3. adobe reader java_请问,如何用JAVA读PDF文件在浏览器中显示,不需要在本地系统中安装Adobe Reader。求java代码...
  4. c语言最新版,【整理】C语言的各种版本:C89,AMD1,C99,C11 – 在路上
  5. python英汉字典_Python基于有道实现英汉字典功能
  6. 《数字集成电路物理设计——陈春章》学习笔记
  7. 计算机农业sci,IEEE旗下JCR1区智慧农业类SCIEI期刊
  8. 滤了asa,cer,cdx,php,aspx等脚本类型的上传情况下添加一个ashx的上传类型
  9. 根据下图实现类。在CylinderTest类中创建Cylinder类的对象,设置圆柱的底面半径和高,并输出圆柱的体积,继承性
  10. 如何在 Linux 中运行 DOS 程序!