简介------Comparable接口介绍及冒泡排序

简单排序

在程序中,排序是常见的一种需求,提供一些数据元素,把这些数据元素按照一定的规则排序.

在java的开发工具包jdk中,已经给我们提供了很多数据结构与算法的实现,比如List,Set,Map,Math等等,都 是以API的方式提供,这种方式的好处在于一次编写,多处使用。我们借鉴jdk的方式,也把算法封装到某个类中, 那如果是这样,在我们写java代码之前,就需要先进行API的设计,设计好之后,再对这些API进行实现。

例如:

类名Arraylist
构造方法Arraylist():创建ArrayList对象
成员方法1.boolean add(E e):向集合中添加元素
2.E remove(int index):从集合中删除指定的元素

然后再使用java代码去实现它.

Comparable接口介绍

java提供的Comparable接口就是用来定义排序规则的

需求:

​ 1.定义一个学生类Student,具有年龄age和姓名username两个属性,并通过Comparable接口提供比较规则;

​ 2.定义测试类Test,在测试类Test中定义测试方法Comparable getMax(Comparable c1,Comparable c2)完成测试

Student类
package ComparablePort;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student implements Comparable<Student> {
    private String name;
    private int age;

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
    //排序比较规则
    public int compareTo(Student o){
        return this.getAge()-o.getAge();
    }
}
GetMax类
package ComparablePort;

public class GetMax {
    //测试方法,获取两个元素中的较大值
    public static Comparable getmax(Comparable c1, Comparable c2) {
        int imp = c1.compareTo(c2);
        if (imp >= 0) {
            return c1;
        } else {
            return c2;
        }
    }
}
Test类
package ComparablePort;

public class Test {
    public static void main(String[] args) {
        Student stu1 = new Student();
        stu1.setName("sanm");
        stu1.setAge(20);
        Student stu2 = new Student();
        stu2.setName("Gainly");
        stu2.setAge(18);
        Comparable max = GetMax.getmax(stu1, stu2);
        System.out.println(max);
    }
}

冒泡排序

冒泡排序是一种计算机领域的较为简单的排序算法.

排序原理
  1. 比较相邻的元素。如果前一个元素比后一个元素大,就交换这两个元素的位置。
  2. 对每一对相邻元素做同样的工作,从开始第一对元素到结尾的最后一对元素。最终最后位置的元素就是最大 值。

image-20221008174027033

冒泡排序API设计:

类名Bubble
构造方法bubble():创建Bubble对象
成员方法1.public static void sort(Comparable[] a):对数组内的元素进行排序
2.private static boolean greater(Comparaable v,Comparable w):判断v是否大于w
3.private static void exch(Comparable[] a,int i,int j):交换a数组中,索引i和索引j处的值
冒泡排序代码实现

需求:

排序前{4,5,6,2,3,8,9};

排序后{2,3,4,5,6,8,9};

Bubble类
package BubbleSort;

public class Bubble {
    public static boolean greater(Comparable v,Comparable w){
        return v.compareTo(w) > 0;
    }
    public static void exch(Comparable[] a,int i,int j){
        Comparable comp;
        comp = a[i];
        a[i] = a[j];
        a[j] = comp;
    }
    public static void sort(Comparable[] a){
        for (int i = 1; i < a.length; i++) {
            for (int j = 0; j < i; j++) {
                if (greater(a[j], a[j+1])) {
                    exch(a,j,j+1);
                }
            }
        }
    }
}
Test类
package BubbleSort;

import java.util.Arrays;

public class Test {
    public static void main(String[] args) {
        Integer[] a = {4,5,6,2,3,8,9};
        Bubble.sort(a);
        System.out.println(Arrays.toString(a));
    }
}

image-20221008193851776

**冒泡排序时间复杂度分析分析:**使用了双层嵌套for循环,内循环体为真正完成排序的代码,分析时间复杂度主要分析内层循环体即可.

在最坏情况下要循环:(N2/2-N/2)+(N2/2-N/2)=N^2-N;
用大O推到法则最终冒泡排序的时间复杂度为O(N^2).

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值