本文来自于我自己的博客:https://abalone.life/archives/sortcompare 未经允许不得转载!若图片无法显示请前往上方我博客的链接!
最近开始学算法了,在学校搞定了三种排序,刚刚在家里实践,现在就依次讲讲吧
首先,我所说的排序就是将数组中的数据按照一定规律(升序或降序)排列
其次,我是用Java实现的,因此用到了泛型(为了算法能更广泛的运用)
那么就先依次上代码吧,在此之前我先利用Java的继承体系做了一个排序模板(里面记录了所有排序都必定会要用到的方法)
Sort.java =>所有排序算法的父类
package life.abalone.sort;
/**
* Create by Abalone
* CreateTime: 2020/11/7 12:40
* 排序类模板
*/
abstract class Sort<T> {
/**
* 判断v是否小于w
* @param v 传递值a
* @param w 传递值b
* @return 当v小于w时返回true
*/
protected boolean less(Comparable<T> v, Comparable<T> w) {
return v.compareTo((T) w) < 0;
}
/**
* 判断v是否大于w
* @param v 传递值a
* @param w 传递值b
* @return 当v大于w时返回true
*/
protected boolean more(Comparable<T> v, Comparable<T> w) {
return v.compareTo((T) w) > 0;
}
/**
* 交换数组中元素的位置
* @param a 数组引用
* @param i 下标为i的元素
* @param j 下标为j元素
*/
protected void exch(Comparable<T>[] a, int i, int j) {
Comparable<T> t = a[i];
a[i] = a[j];
a[j] = t;
}
/**
* 打印数组
* @param a 数组引用
*/
protected void show(Comparable<T>[] a) {
for (Comparable<T> comparable : a) {
System.out.print(comparable+" ");
}
System.out.println();
}
/**
* 判断数组是否为升序
* @param a 数组引用
* @return true表示升序
*/
protected boolean isSortedASC(Comparable<T>[] a) {
for (int i = 1; i < a.length; i++) {
if (less(a[i], a[i - 1]))
return false;
}
return true;
}
/**
* 判断数组是否为降序
* @param a 数组引用
* @return true表示降序
*/
protected boolean isSortedDESC(Comparable<T>[] a) {
for (int i = 1; i < a.length; i++) {
if (more(a[i], a[i - 1]))
return false;
}
return true;
}
}
这个类里面使用了abstract
关键字,即将类虚拟化,用于继承,不允许被直接实例化,以及泛型,用于广泛使用.
那么对于排序算法的具体实现,我一共写了三种,分别是:
-
<