java数据结构与算法(day2)--简单排序
模式:设计api实现api
简单排序
举例(商品排序)
1.1Comparable接口介绍(排序算法更有通用性:对象排序)
创建对象,并且生成豆子。创建Comparable接口
1 package cn.itcast.algorithm.sort;
2
3 public class Student implements Comparable<Student>{
4 private String username;
5 private int age;
6
7 public Student() {
8 }
9
10 public Student(String username, int age) {
11 this.username = username;
12 this.age = age;
13 }
14
15 /**
16 * 获取
17 * @return username
18 */
19 public String getUsername() {
20 return username;
21 }
22
23 /**
24 * 设置
25 * @param username
26 */
27 public void setUsername(String username) {
28 this.username = username;
29 }
30
31 /**
32 * 获取
33 * @return age
34 */
35 public int getAge() {
36 return age;
37 }
38
39 /**
40 * 设置
41 * @param age
42 */
43 public void setAge(int age) {
44 this.age = age;
45 }
46
47 public String toString() {
48 return "Student{username = " + username + ", age = " + age + "}";
49 }
50
51 public int compareTo(Student o){
52 return this.getAge()-o.getAge();
53 }
54 }
实例化对象,创建规则
1 package cn.itcast.algorithm.text;
2
3 import cn.itcast.algorithm.sort.Student;
4
5 public class TextComparable {
6 public static void main(String[] args) {
7 // 创建对象,调用方法测试
8 Student s1=new Student();
9 s1.setUsername("李四");
10 s1.setAge(18);
11
12 Student s2=new Student();
13 s2.setUsername("张三");
14 s2.setAge(20);
15
16 Comparable max = getMax(s1, s2);
17 System.out.println(max);
18 }
19
20 public static Comparable getMax(Comparable c1,Comparable c2){
21 int result=c1.compareTo(c2);
22 //判断result的情况
23 if (result>=0){
24 return c1;
25 }else {
26 return c2;
27 }
28 }
29
30 }
1.2 冒泡排序
排序原理:
1)比较相邻的元素,如果前一个元素比后一个大,就交换两个元素的位置。
2)对每一对相邻元素做相同的工作,从第一位元素到结尾最后一位元素。最终最后位置的元素就是最大值。
为什么叫冒泡排序?
冒泡的过程把合适的元素放到合适的位置
冒泡排序aip设计:
构造方法:Bubble():创建bubble()对象
成员方法:
1对数组内的元素进行排序
2判断相邻元素大小
3交互元素位置
冒泡排序程序设计:
1 package cn.itcast.algorithm.sort;
2
3 public class Bubble {
4
5 public static void sort(Comparable[] a){
6 for(int i=a.length-1;i>0;i--){
7 for(int j=0;j<i;j++){
8 //比较索引j和j+1的值
9 if (greater(a[j],a[j+1])){
10 exch(a,j,j+1);
11 }
12 }
13 }
14
15 }
16
17 private static boolean greater(Comparable v, Comparable w){
18 // int result=v.compareTo(w);
19 return v.compareTo(w)>0;
20
21 }
22
23 private static void exch(Comparable[] a,int i, int j){
24
25 Comparable temp;
26 temp = a[i];
27 a[i]=a[j];
28 a[j]=temp;
29 }
30 }
text
1 package cn.itcast.algorithm.text;
2
3 import cn.itcast.algorithm.sort.Bubble;
4
5 import java.util.Arrays;
6
7 public class BubbleText {
8 public static void main(String[] args) {
9 Integer[] arr={23,45,67,89,0,54,35};
10 Bubble.sort(arr);
11 System.out.println(Arrays.toString(arr));
12
13 }
14 }
1.3选择排序
排序原理:(映射索引)
假设第一个元素是最小值,和其他索引出的值进行比较,如果当前索引值大于其他处的索引值,则假定其它索引处为最小值,最后可以找到最小值的所在的索引
交互第一个索引处和最小值所在索引处所在的值
选择排序api设计
构造方法:
Selection
成员方法:
选择排序程序设计:
1 package cn.itcast.algorithm.sort;
2
3 public class Selection {
4 public static void sort(Comparable[] a){
5 for (int i = 0; i <= a.length-2; i++) {
6 int minIndex = i;
7 for (int j=i+1;j<a.length;j++){
8 if(greater(a[minIndex],a[j])){
9 minIndex=j;
10
11 }
12 }
13 exch(a,i,minIndex);
14 }
15
16 }
17
18 private static boolean greater(Comparable v , Comparable w){
19 return v.compareTo(w)>0;
20 }
21
22 private static void exch(Comparable[] a, int i, int j){
23 Comparable temp;
24 temp = a[i];
25 a[i]=a[j];
26 a[j]=temp;
27 }
28 }
text
1 package cn.itcast.algorithm.text;
2
3 import cn.itcast.algorithm.sort.Selection;
4
5 import java.util.Arrays;
6
7 public class SelectionText {
8
9 public static void main(String[] args) {
10 Integer[] a = {123,56,78,990,4569,789};
11 Selection.sort(a);
12 System.out.println(Arrays.toString(a));
13
14 }
15
16
17 }
java数据结构与算法(day2)--简单排序的更多相关文章
- 【Java数据结构与算法】简单排序、二分查找和异或运算
简单排序 选择排序 概念 首先,找到数组中最小的那个元素,其次,把它和数组的第一个元素交换位置(如果第一个元素就是最小的元素那么它就和自己交换).再次,在剩下的元素中找到最小的元素,将它与数组的第二个 ...
- Java数据结构和算法(五)--希尔排序和快速排序
在前面复习了三个简单排序Java数据结构和算法(三)--三大排序--冒泡.选择.插入排序,属于算法的基础,但是效率是偏低的,所以现在 学习高级排序 插入排序存在的问题: 插入排序在逻辑把数据分为两部分 ...
- Java数据结构和算法(三)--三大排序--冒泡、选择、插入排序
三大排序在我们刚开始学习编程的时候就接触过,也是刚开始工作笔试会遇到的,后续也会学习希尔.快速排序,这里顺便复习一下 冒泡排序: 步骤: 1.从首位开始,比较首位和右边的索引 2.如果当前位置比右边的 ...
- JAVA数据结构和算法 3-简单排序
排序中的两种基本操作是比较和交换.在插入排序中还有移动. 冒泡排序:两两比较相邻元素,如果较大数位于较小数前面,则交换: 每一趟遍历将一个最大的数移到序列末尾,共遍历N-1趟. 如果执行完一趟之后没有 ...
- Java数据结构与算法(2) - ch03排序(冒泡、插入和选择排序)
排序需要掌握的有冒泡排序,插入排序和选择排序.时间为O(N*N). 冒泡排序: 外层循环从后往前,内存循环从前往后到外层循环,相邻数组项两两比较,将较大的值后移. 插入排序: 从排序过程的中间开始(程 ...
- Java数据结构和算法(二)--队列
上一篇文章写了栈的相关知识,而本文会讲一下队列 队列是一种特殊的线性表,在尾部插入(入队Enqueue),从头部删除(出队Dequeue),和栈的特性相反,存取数据特点是:FIFO Java中queu ...
- Java数据结构和算法 - 简单排序
Q: 冒泡排序? A: 1) 比较相邻的元素.如果第一个比第二个大,就交换它们两个; 2) 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数; 3) 针 ...
- Java数据结构和算法(九)——高级排序
春晚好看吗?不存在的!!! 在Java数据结构和算法(三)——冒泡.选择.插入排序算法中我们介绍了三种简单的排序算法,它们的时间复杂度大O表示法都是O(N2),如果数据量少,我们还能忍受,但是数据量大 ...
- Java数据结构和算法 - 高级排序
希尔排序 Q: 什么是希尔排序? A: 希尔排序因计算机科学家Donald L.Shell而得名,他在1959年发现了希尔排序算法. A: 希尔排序基于插入排序,但是增加了一个新的特性,大大地提高了插 ...
- Java数据结构和算法 - 堆
堆的介绍 Q: 什么是堆? A: 这里的“堆”是指一种特殊的二叉树,不要和Java.C/C++等编程语言里的“堆”混淆,后者指的是程序员用new能得到的计算机内存的可用部分 A: 堆是有如下特点的二叉 ...
随机推荐
- psutil模块使用(系统监控,性能分析,进程管理)
psutil模块的介绍 在Python中,我们可以使用psutil这个第三方模块去获取信息的信息. psutil模块可以跨平台使用,支持Linux/UNIX/OSX/Windows等,它主要用来做系统 ...
- vue项目 h5上拉加载(分页功能)
<template> <div class="receivable"> <div class="application-header fle ...
- 【Vue】启动vue项目报错: errno: -4058, code: ‘ENOENT‘, syscall: ‘spawn cmd‘
运行vue项目(npm run dev)报错 报错如下 问题原因 缺少cmd运行程序的环境变量 解决方法在环境变量Path中加上C:\windows\system32
- nacos注册中心单节点ap架构源码解析
一.注册流程 单nacos节点流程图如下: 流程图可以知,Nacos注册流程包括客户端的服务注册.服务实例列表拉取.定时心跳任务:以及服务端的定时检查服务实例任务.服务实例更新推送5个功能. 服务注册 ...
- MQ系列10:如何保证消息幂等性消费
MQ系列1:消息中间件执行原理 MQ系列2:消息中间件的技术选型 MQ系列3:RocketMQ 架构分析 MQ系列4:NameServer 原理解析 MQ系列5:RocketMQ消息的发送模式 MQ系 ...
- 内网渗透-smb&wmi明文&hash传递
首先我们要知道,在windows2012以上版本默认会关闭wdigest,那么攻击者就无法从内存中获取明文密码了 windows2012以下的版本如果安装了KB2871997补丁,那么同样也会导致无法 ...
- python之路54 forms组件 渲染 展示 参数补充 modelform组件 django中间件
forms组件渲染标签 <p>forms组件渲染标签的方式1(封装程度高 扩展性差 主要用于本地测试):</p> {# {{ form_obj.as_p }}#} {# {{ ...
- (9)go-micro微服务Redis配置
目录 一 go-redis介绍 二 go-redis安装 三 redis初始化连接 四 存储mail邮件 五 存储token 六 最后 一 go-redis介绍 Redis(Remote Dictio ...
- 小H的小屋
题解 [NOI2004]小H的小屋 前记 又鸽了好久,这回可要努力更新了 2019.6.2,痛下杀心,把电脑上所有的游戏都删掉了,提前160天奋力备考NOIP.目标:A类省队! 我是传送门 题解 这道 ...
- 对象的变为私有方法不可改动 seal freeze