排序算法(1)
所谓排序,就是按照某种规律把一组对象重新进行排列的过程。日常工作中,比如excel表格中,很多时候都要按照某种规律进行排序。因此,排序是所有应用中非常基础的一部分。首先作为对排序算法的第一次接触,我们以几种初级的排序算法作为开始
在任何排序算法中,主要思想就是对一组对象中的元素进行比较并交换。任何算法的核心都是比较并交换,它们的不同性在于如何进行比较并交换
所以我们对于各种算法可以拥有一个公共模板,java中的很多排序的数据都实现了Comparable接口,因此下面的程序通过把比较和交换进行抽象出来,同时又加入打印和判断的功能,从而使排序拥有一定的模板化。
/**
* @ClassName Example
* @Descrition TODO
* @Date 2022/4/16 22:33
* @Created by 小叶
*/
public class Example {
public static void main(String[] args) {
//主程序,执行程序
}
//比较部分
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 = 1; i < a.length; i++) {
if(less(a[i],a[i-1])){
return false;
}
}
return true;
}
public static void sort(Comparable[] a){
//具体排序算法
}
}
通过上述的代码描述,因此,可以知道,每个算法的具体不同在于sort()方法,下面将介绍具体的算法
选择排序
所谓选择排序核心思想在于:每一轮都对一组对象选出最小的一个对象的索引下标,并进行记录保存,然后在和这轮最前面的对象进行交换,依次执行,直到结束。
public static void sort(Comparable[] a){
int N = a.length;
for (int i = 0; i < N; i++) {
int min = i;
for (int j = i+1; j < N; j++) {
if(less(a[j],a[min])){
min = j;
}
}
exch(a, i, min);
}
}
插入排序
所谓插入,核心思想在于当你拥有一个排序集合和一个未排序集合,每次从未排序集合中取出元素插入到已排序集合中,最终生成一个有序集合。
//将a[]进行升序排列
public static void sort(Comparable[] a){
int N = a.length;
for (int i = 1; i < N; i++) {
for (int j = i; j >0 && less(a[j],a[j-1]) ; j--) {
exch(a,j,j-1);
}
}
}
总结

浙公网安备 33010602011771号