排序算法(1)

排序算法(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);
          }
      }
  }

总结

对于上述两种简答的排序算法,可以进行一番比较,如时间复杂度和空间复杂度。如果进行一番仔细思考,会发现对于最好情况而言,插入排序是要好于选择排序的,但这不是主要比较目的。因为基本上是比较最坏时间复杂度的,但也可以从中得到一些思考,是否选择排序过于冗余呢,当你继续学习排序算法时,是否插入排序又变得冗余呢?在此,并没有对最基本的冒泡排序进行说明,再此页不在进行冗余的说明。

posted @ 2022-04-16 23:54  叶nil  阅读(175)  评论(3)    收藏  举报