java常用演算法
通用抽象類
- public abstract class Sorter<E extends Comparable<E>> {
- public abstract void sort(E[] array,int from ,int len);
- public final void sort(E[] array)
- {
- sort(array,0,array.length);
- }
- protected final void swap(E[] array,int from ,int to)
- {
- E tmp=array[from];
- array[from]=array[to];
- array[to]=tmp;
- }
- }
一 插入排序法:
說明: 每次將一個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子檔案中的適當位置,直到全部記錄插入完成為止。
- 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從而完成排序。)
- 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個元素了。
- 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);
- }
- }
- }
相關文章
- java常用排序演算法Java排序演算法
- Java常用演算法原理剖析Java演算法
- 【演算法】Java實現七種常用排序演算法演算法Java排序
- Java Web知識點--常用演算法(4)JavaWeb演算法
- 用 Java 實現的八種常用排序演算法Java排序演算法
- Java常用的7大排序演算法彙總Java排序演算法
- Java常用加密演算法(一)—單向加密演算法(MD5/SHA)Java加密演算法
- 常用演算法演算法
- GIS常用演算法演算法
- 常用加密演算法加密演算法
- js 常用演算法JS演算法
- 常用排序演算法排序演算法
- 常用限流演算法演算法
- 常用演算法合集演算法
- 常用演算法模板演算法
- 常用演算法 插值演算法演算法
- Java 常用類Java
- java常用APIJavaAPI
- Java常用類Java
- 常用查詢演算法演算法
- 複習常用演算法_冒泡演算法演算法
- 常用演算法之貪心演算法演算法
- Java-進階篇【常用API、正規表示式、Lambda、演算法】---05JavaAPI演算法
- JAVA(三)JAVA常用類庫/JAVA IOJava
- java字串常用方法Java字串
- Java之常用APIJavaAPI
- java常用寫法Java
- Java常用語(轉)Java
- 八種常用排序演算法排序演算法
- 常用演算法-選擇排序演算法排序
- 常用演算法-插入排序演算法排序
- 常用演算法之回溯法演算法
- 常用10種演算法(二)演算法
- 常用10種演算法(一)演算法
- 那些常用的加密演算法加密演算法
- 常用 API 演算法介紹API演算法
- PHP常用演算法補充PHP演算法
- javascrip常用演算法總結Java演算法