文章目录

  • 前言
  • 1、排序算法
  • 2、冒泡排序
    • 3、面向对象

前言

提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

1、排序算法

Java中的常见排序算法有:冒泡、插入、选择、快速、希尔、归并、堆7种 。

  • 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序。
  • 线性时间非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此称为线性时间非比较类排序。

构建一个乱序的数组用于进行排序

int[] arr=new int[6];//数据必须是可比较的,否则不能进行排序
Random r=new Random();
for(int i=0;i<arr.length;i++)arr[i]=r.nextInt(100);

2、冒泡排序

冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为每趟比较将当前数列未排序部分的最大的元素“沉”到数列末端,而小的元素会经由交换慢慢“浮”到数列

for(int i=1;i<arr.length;i++){//用于控制比较次数for(int k=0;k<arr.length-i;k++){if(arr[k]>arr[k+1]){int temp=arr[k];arr[k]=arr[k+1];arr[k+1]=temp;}}
}

循环执行次数:(n-1)+(n-2)+(…)+(1)=(n*n-n)/2
平均时间复杂度为O(n平方) 空间复杂度O(1) 稳定的排序算法
练习:随机生成一个长度为10的数组,进行排序

import java.util.Random;public class A1 {public static void main(String[] args) {int[] arr = new int[10];// 生成随机整数,要求取值范围为0-1000generateNumber(arr);for (int temp : arr)System.out.print(temp + "\t");System.out.println();bubble(arr);for (int temp : arr)System.out.print(temp + "\t");System.out.println();}
//冒泡排序private static void bubble(int[] arr) {long start=System.currentTimeMillis();//獲取執行到這條語句的系統當前時,單位為毫秒 1970-1-1 0:0:0for (int k = 1; k < arr.length; k++) {for (int i = 0; i < arr.length - k; i++) {//(9+8+...+1)=45=(10-1)*10/2=(n-1)*n/2=n*n/2+n/2---->O(n*n)  執行時間和n的平方成正相關if (arr[i] > arr[i + 1]) {//衡量一個算法的優劣常用的方法是時間複雜度和空間複雜度//空間複雜度  O(1)   常量int temp = arr[i];arr[i] = arr[i + 1];arr[i + 1] = temp;}}}long end=System.currentTimeMillis();System.out.println("排序所需要的時間為"+(end-start)+"ms");}
//生成隨機整數數組private static void generateNumber(int[] arr) {Random r = new Random();for (int i = 0; i < arr.length; i++) {arr[i] = r.nextInt(1000);}}}

练习题:
键盘录入多个整数,点e表示输入完成,将所有录入数据放入数组,然后进行从大到小排序显示
自定义方法,用于实现向数组中追加数据,并且将原始数组长度加1

import java.util.Scanner;public class Work03 {//练习题://键盘录入多个整数,点e表示输入完成,将所有录入数据放入数组,然后进行从大到小排序显示//自定义方法,用于实现向数组中追加数据,并且将原始数组长度加1public static void main(String[] args) {Scanner sc = new Scanner(System.in);int[] arr = new int[10];while (true) {System.out.println("请输入正整数数字,按e结束");String str = sc.nextLine();if ("e".equals(str)) {break;}try {int a = Integer.parseInt(str);if (a != 0) {//将输入的数字加入数组中arr= method01(arr,a);} else {System.out.println("请非0的整数数字");}} catch (Exception e) {System.out.println("输入不合法,请重新输入");}}method02(arr);method03(arr);}public static int[] method01(int[] arr, int a){int[] brr=arr;int aa =-1;for(int q=0;q<arr.length;q++){if(arr[q]==0){aa=q;break;}}if(aa ==-1){brr=new int[arr.length+1];for(int w=0;w<arr.length;w++){brr[w]=arr[w];}brr[arr.length]=a;}else{arr[aa]=a;}return brr;}public static void method02(int[] arr){if(arr==null||arr.length<=1){return ;}for(int a =1; a<arr.length;a++){for(int b =0;b<arr.length-a;b++){if(arr[b]>arr[b+1]){int aa =arr[b];arr[b]=arr[b+1];arr[b+1]=aa;}}}}public static void method03(int[] arr){for(int a : arr){System.out.print(a+"\t");}}
}

3、面向对象

面向对象的三大基本特征是:封装、继承、多态

  • 封装隐藏了类的内部实现机制,从而可以在不影响使用者的前提下改变类的内部结构,同时保护了数据
  • 继承是为了重用父类代码,同时为实现多态性作准备
  • 多态性是发送消息给某个对象,让该对象自行决定响应何种行为。通过将子类对象引用赋值给超类对象引用 变量来实现动态方法调用。

面向过程是一种自上而下的程序设计方法,主要思路专注于算法的实现

  • 过程式的特征是以函数为中心,用函数作为划分程序的基本单位;数据在过程式设计中处于从属的位置
  • 过程式设计的优点是易于理解和掌握,这种逐步细化问题的设计方法与大多数人的思维方式比较接近
  • 软件代码的重用性很差,即使重用,也是简单的复制和拷贝,代码数量急剧增加。而不能直接继承和应用

面向对象是一种自下而上的程序设计方法,以数据为中心,类是表现数据的单位,是划分程序的基本单位

  • 面向对象设计是自下而上的特性,允许开发者从问题的局部开始,在开发过程中逐步加深对系统的理解。需 求变化会作用到系统开发本身,形成一种螺旋式的开发方式
  • 面向对象设计中,类封装了数据,而类的成员函数作为其对外的接口,抽象地描述类,用类将数据和操作这 些数据的函数放在一起,这就是面向对象设计方法的本

类就是模板,也可以说类就是创建对象的基地,能产生出很多不同的对象

  • java语言与其他面向对象语言一样,引入类的概念是用来创建对象的模板,它包含被创建对象的状态描述和方 法的定义。java是面向对象语言,它的源文件是由若干个类组成,源文件的扩展名为.java的文本文件
  • 要学习java编程就必须学会怎样去编写类,即怎样用java的语法去描述一类事物共有的属性和功能。属性通过 变量来刻画,功能通过方法来体现,即方法操作属性形成一定的算法来实现一个具体的功能

类把数据和对数据的操作封装成一个整体

  • 数据是描述某种类型的相关参数
  • 操作是允许执行的动作

一切事物皆对象

抽象是从特定的实例中抽取共同的性质以形成一般化概念的过程

  • 把众多的事物归纳、划分成类是我们在认识世界时经常采用的方法
  • 分类所依据的原则是抽象,也就是忽略事物的非本质特征,只注意那些与当前目标有关的本质特征
  • 找出事物的共性并将具有共同性质的事物划分为同一个类

如面向对象的分析OOA、面向对象的设计OOD以及面向对 象的编程实现OOP

对象是要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表 示抽象的规则、计划或事件

在现实世界中:是客观世界中的一个实体
在计算机世界中:是一个可标识的存储区域
现实世界中所有的事物都是对象 对象都具有某些特征,并展现某些行为

对象的两个要素
属性

  • 描述对象静态特性(结构特性)的一个数据项, 描述一个人可用姓名、性别、身份证号等属性
  • 方法(也称服务) 用于描述对象动态特性(行为特性)的一个操作系列,每个人都具有工作、学习等行为特性
  • 对象将数据和施加于数据上的操作打包成一个不可分割的最基本的模块,使得仅有该类的有限个方法才可以 操纵、改变这些数据,

对象的状态和行为

  • 对象具有状态,一个对象用数据值来描述它的状态 对象还有操作,用于改变对象的状态,对象及其操作就是对象的行为
  • 对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中

java冒泡排序及面向对象基本概念相关推荐

  1. Java基础之面向对象的概念 继承---组合----枚举类

    Java基础之面向对象的概念 继承---组合----枚举类 本章作为面向对象概念的最后一篇,但是作为一名java程序员在面向对象的这条路上还很长. 一.继承与组合简介 继承是实现类重用的重要手段,但是 ...

  2. java基础知识——面向对象基本概念

    文章目录 Java基本概念 源文件声明规则 Java包 Import语句 继承类型 继承的特性 继承关键字 super 与 this 关键字 构造器 方法的重写规则 重载(Overload) 重写与重 ...

  3. 菜鸟学习笔记:Java基础篇3(面向对象思想、程序执行过程内存分析、面向对象重要概念)

    菜鸟学习笔记:Java面向对象篇上 Java面向对象的思想 Java程序执行过程内存分析 Java垃圾回收机制 构造方法 方法重载(overload) static关键字 this关键字 Java面向 ...

  4. ​Java面向对象的概念整理

    Java中一切皆是对象! 注意:8种基本数据类型不支持面向对象的编程机制,基本数据类型的数据也不具备"对象"的特性:没有成员变量.方法可以被调用. 为解决8种基本数据类型不能当成O ...

  5. 云计算 java go c_面向对象编程的面向过程表示:c java go

    题目就这么抽象~.~其实一点都不抽象,老师以前也说过吧,面向对象就是建立在面向过程的基础上的. 下面这些主要是能让大家吸收一些较新鲜的编程思路,对于嵌入式编程大有裨益,对理解面向对象的底层封装全新的认 ...

  6. Java冒泡排序【简】

    为什么80%的码农都做不了架构师?>>>    Java冒泡排序 概念:重复遍历要排序的数列.一次比较两个元素,大小互换.遍历到该数列无需互换,排序完成 Java冒泡排序 publi ...

  7. JavaSE(二十)——面向对象的概念及三个基本特征

    文章目录 1. 面向对象的概念 2. 面向对象的三个基本特征 2.1 封装 2.2 继承 2.3 多态 1. 面向对象的概念 面向对象是一种符合人类思维习惯的编程思想.现实生活中存在各种形态不同的事物 ...

  8. Java基础-初识面向对象编程(Object-Oriented-Programming)

    Java基础-初识面向对象编程(Object-Oriented-Programming) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Java是一门面向对象的程序设计语言.那么什 ...

  9. java什么是类和对象,Java类和对象的概念

    Java是一门面向对象的编程(Object Oriented Programming, OOP)语言,面向对象是相对于面向过程而言.那么什么是面向对象,什么又是面向过程呢? 面向过程--步骤化 面向过 ...

  10. java基础(一)-面向对象思想

    前言 java是一门面向对象的语言,在学习java前,先要理解面向对象这个概念,区别于c这类的面向过程语言,面向对象有着什么一样的特点呢?先上一张思维导图吧: 对象 什么是对象 问题空间中的元素及其在 ...

最新文章

  1. “新一代城市大脑建设与发展“专家研讨会
  2. 我遇到的优秀年轻人都有哪些特质
  3. 怎么关超声_肋骨骨折——超声的优势
  4. IOS UIPageControl的设置点为一张图片
  5. java web 服务器环境搭建之jdk安装
  6. c语言金箍棒答案,《西游记》阅读测试题(带答案)
  7. 阿里日马云给新婚员工定KPI:要学会生活 早生孩子!
  8. 2015年辽宁省赛Interesting Tree
  9. Zabbix 触发器函数方法整理
  10. Linux 基金会成立持续交付基金会
  11. 解释HTTP中Get和Post。它们有什么区别,哪个使用时更加安全?
  12. 5月8号--华为正式推出新企业标识
  13. 时间序列分析matlab_平稳时间序列分析之模型识别
  14. C语言实现黑客帝国 数字雨
  15. 七彩虹固态硬盘 慧荣SM2258XT主控开卡教程,SM2259XT2貌似差不多
  16. 直连路由和静态路由(实验)
  17. java excel 冻结_如何实现表格的首行冻结2
  18. AD软件画电路图笔记
  19. android sqlite动态创建表,QT下如何实现SQLite动态创建表
  20. apache中的php模块安装

热门文章

  1. idea快捷键最全最新最好
  2. fanuc系统屏蔽服务器,FANUC伺服轴的屏蔽方法
  3. Java开发微信支付实践
  4. 科普 | USB4的全面解读
  5. MATLAB数据拟合中的若干问题(待续)
  6. 详解全局免流原理(转载)
  7. 虎牙直播电影一天收入_电影收入
  8. mysql同步 触发器_MySQL触发器运用于迁移和同步数据的实例教程
  9. 人脸重建速览,从3DMM到表情驱动动画
  10. php社保个税计算器 V20180925