【Mark学算法】排序算法(一)

初级排序算法

排序算法是将一组对象按照某种逻辑顺序重新排列的过程.

排序规则

排序算法的目标是将所有元素主键按照某种方式排列(通常按照大小字母顺序).排序后索引较大的主键等于索引较小的主键.元素主键的性质在不用的应用中千差万别.在Java中,元素通常都是对象,对主键的抽象则是通过一种内置的机制Comparable.在创建自己的数据类型时,只需实现Comparale接口.

package java.lang;
import java.util.*;
public interface Comparable<T> {
    public int compareTo(T o);
}

自定义数据类型中,只需要实现Comprable接口就能排序,通过compareTo()方法来定义类型对象的自然次序.

一般情况下,使用v.copareTo(w)对元素v,元素w比较,如果

  • v<w -------> -1
  • v=w-------> 0
  • v>w--------> 1
    注意如果v和w无法比较,或者两者之一为null,v.compareTo(w)会抛出一个异常.此外compareTo()必须实现一个全序关系,即
    自反性 v=v
    反对称性 v<w => w>v
    传递性 v<=w,且w<=x => v<=x

模板

下面展示数据排序实现的框架,具有如下方法.
sort()元素排序
less()元素比较
exch()元素交换位置
show()打印字符数组

public class SortModule {
    //排序
    public static void sort(Comparable[] a){

    }
    //比较元素
    private static boolean less(Comparable v,Comparable w){
        return v.compareTo(w)<0;
    }
    //交换
    private static void exch(Comparable[] a,int i,int j){
        Comparable t=a[i];
        a[i]=a[j];
        a[j]=t;
    }
    //打印数组
    private static void show(Comparable[] a){
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i]+" ");
            System.out.println();
        }
    }
    //判断是否有序
    public static boolean isSorted(Comparable[] a){
        for (int i = 0; i < a.length; i++)
            if (less(a[i],a[i-1])) return false;
            return true;
    }
    public static void main(String[] args){
       String a="marklearnjava" 
       sort(a);
     while(isSort(a)){
       show(a);
      }
    }
}

案列对学生类进行排序(主键:年龄)

public class Student implements Comparable<Student>{
    private String username;
    private int age;

    public String getUsername() {
        return username;
    }

    public int getAge() {
        return age;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "username='" + username + '\'' +
                ", age=" + age +
                '}';
    }
    @Override
    public int compareTo(Student o) {
        return this.getAge()-o.getAge();
    }
}

public class Test {
    public static void main(String[] args) {
        Student s1 = new Student();
        s1.setUsername("张三");
        s1.setAge(18);
        Student s2 = new Student();
        s2.setUsername("李四");
        s2.setAge(20);
        Comparable max = getMax(s1, s2);
        System.out.println(max);
    }
    public static Comparable getMax(Comparable c1,Comparable c2){
        int result = c1.compareTo(c2);
        if (result>=0){
            return c1;
        }else{
            return c2;
        }
    }
}

输出
未完待续^ - ^

发布了10 篇原创文章 · 获赞 7 · 访问量 195

猜你喜欢

转载自blog.csdn.net/MARK19960120/article/details/105698086
今日推荐