首页 > 编程语言 >java数据结构与算法(day2)--简单排序

java数据结构与算法(day2)--简单排序

时间:2022-12-17 18:56:11浏览次数:55  
标签:username sort Comparable java -- age day2 int public

模式:设计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 }

 

标签:username,sort,Comparable,java,--,age,day2,int,public
From: https://www.cnblogs.com/zhuxuanlv/p/16989344.html

相关文章

  • 【SpringBoot】使用WebSocket做消息对话
    Http协议只能客户端发送---服务器回复,无法做到服务器主动向客户端发送消息,所以可以使用websocket来进行双向通道发消息 研究了一下抖音斗鱼的弹幕也是用的websocket,......
  • mysql零基础-2
    更新中的数据完整性错误UPDATEemployeesSETdepartment_id=55WHEREdepartment_id=110;删除数据删除一条记录DELETEFROMtable_name[WHERE<condition>];......
  • 短链服务
    1短链服务#例如:本来的商品网页链接地址非常长做商品推广时,很不合适https://detail.m.tmall.com/templatesNew/index?id=636841589429&downgrade省略.........
  • .NET Core应用如何通过SSL访问MongoDB?
    大家好,我是Edison。最近有一个ASP.NETCore通过SSL证书访问MongoDB的需求,但是在网上发现资料很少,于是调查了一番,做了如下的笔记,希望对你有用。背景在实际场景中,开发环境......
  • 【云原生】Prometheus 自定义告警规则
    目录一、概述二、告警实现流程三、告警规则1)告警规则配置1)监控服务器是否在线3)告警数据的状态四、实战操作1)下载node_exporter2)启动node_exporter3)配置Prometheus加载nod......
  • python之路51 聚合查询 分组查询
    图书管理系统1.表设计先考虑普通字段再考虑外键字段数据库迁移、测试数据录入2.首页展示3.书籍展示4.书籍添加5.书籍编辑后端如何获取用户想要编辑的......
  • 1764. 通过连接另一个数组的子数组得到一个数组
    1764.通过连接另一个数组的子数组得到一个数组题解:数据范围小,直接暴力双指针publicbooleancanChoose(int[][]groups,int[]nums){intn=groups.le......
  • 继承存在的问题
    继承可能造成子类的无限膨胀,不利于类体系的维护和安全。继承的子类对象确定于编译期,无法满足需要运行期才确定的情况,而类聚合很好地解决了这一问题。随着继承层次的复杂......
  • 1. ansible学习总结: 基础模块
    copy模块:#传输文件到目标机 ansible-i/kingdee/ansible/hostall-mcopy-a'src=/tmp/aaaa.tgzdest=/tmp/aaaa.tgz'cron模块: #创建任务 ansible-i/kingdee/ans......
  • 基于鸿蒙的手写板
    一、前言本着要带着目标去学习的态度,做了一个简易的手写板,使用的语言是JAVA,效果图如下:二、准备工作下载DevEcoStudio,创建一个新项目(鸿蒙2.0)。接着我思考了一下手写......