Java排序算法

    技术2022-05-20  48

    一  插入排序法:

    说明:  每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。

    Java代码 public class InsertSorter<E extends Comparable<E>> extends Sorter<E> {        /**      * from  起始位置      * len   从起始位置开始 需要比较的次数      */     public void sort(E[] array, int from, int len) {           E tmp=null;            for(int i=from+1;i<from+len;i++){                 tmp=array[i];                 int j=i;                 for(;j>from;j--){                     if(tmp.compareTo(array[j-1])<0){                         array[j]=array[j-1];                     }                     else break;                 }                 array[j]=tmp;             }       }   } 

    ----------------------------------------------------------------------------

    二  冒泡排序法:

    说明:  算法思想是每次从数组末端开始比较相邻两元素,把第i小的冒泡到数组的第i个位置。i从0一直到N-1从而完成排序。(当然也可以从数组开始端开始比较相邻两元素,把第i大的冒泡到数组的第N-i个位置。i从0一直到N-1从而完成排序。)

    Java代码 public class BubbleSorter<E extends Comparable<E>> extends Sorter<E> {         private static  boolean DWON=true;              public final void bubble_down(E[] array, int from, int len)       {           for(int i=from;i<from+len;i++)           {               for(int j=from+len-1;j>i;j--)               {                 if(array[j].compareTo(array[j-1])<0)                   {                       swap(array,j-1,j);                   }               }           }       }              public final void bubble_up(E[] array, int from, int len)       {           for(int i=from+len-1;i>=from;i--)           {               for(int j=from;j<i;j++)               {                   if(array[j].compareTo(array[j+1])>0)                   {                       swap(array,j,j+1);                   }               }           }       }       @Override      public void sort(E[] array, int from, int len) {                      if(DWON)           {               bubble_down(array,from,len);           }           else          {               bubble_up(array,from,len);           }       }          } 

    -----------------------------------------------------------------

    三  选择排序法:

    说明: 选择排序相对于冒泡来说,它不是每次发现逆序都交换,而是在找到全局第i小的时候记下该元素位置,最后跟第i个元素交换,从而保证数组最终的有序。相对与插入排序来说,选择排序每次选出的都是全局第i小的,不会调整前i个元素了。

     

    Java代码 public class SelectSorter<E extends Comparable<E>> extends Sorter<E> {         @Override         public void sort(E[] array, int from, int len) {              for(int i=0;i<len;i++){                  int smallest=i;                  int j=i+from;                  for(;j<from+len;j++){                      if(array[j].compareTo(array[smallest])<0)                           smallest=j;                   }                   swap(array,i,smallest);                         }           }   } 


    最新回复(0)