寫了很多次關於排序演算法的**,但是由於沒有儲存,都沒有流傳下來。寫到部落格上,總不至於丟了吧。^_^
package com.topic.sort;
/** * 排序演算法的實現
* * @author zhenqiag
* */
public class mysort
boolean issorted = false;
for (int i = 0; i < a.length - 1 && !issorted; i++)
}} }
public static void selection(int a)
for (int i = 0; i < a.length - 1; i++)
}} }
public static void insertsort(int a)
int i = 0;
int j = 0;
for (i = 1; i < a.length; i++)
a[j + 1] = temp;
} }public static void hellsort(int a)
int delta = 3;
for(int i = delta; i >= 1; i--) }
public static void hellsortelem(int a, int delta)
a[j + delta] = temp;
} }public static void binaryinsert(int a)
for (int i = 1; i < a.length; i++)
else
}for (int j = i - 1; j >= high + 1; j--)
a[high + 1] = temp;
} }public static void quicksort(int a, int begin, int end)
if (begin < end) }
public static int partation(int a, int begin, int end)
a[begin] = a[end];
if (begin < end && a[begin] > temp)
a[end] = a[begin];
} a[begin] = temp;
return begin; }
/*** 堆調整的過程
* 將堆從i節點開始進行調整
* 調整的過程:
* 1 如果當前根節點的子節點都存在,那麼比較大小,將最大的儲存下來
* 2 如果當前根節點比較大的子節點大,那麼退出(因為它的子節點所在的樹已經是合適的堆了)
* 3 如果當前根節點比較大的子節點小,那麼交換兩個節點的值,然後繼續調整交換後的
* 子節點所在的子樹的堆
* @param a 陣列
* @param i 從哪個位置開始調整
* @param length 調整的元素個數(最大下標是: length - 1)
*/public static void heapadjust(int a, int root, int length)
//將較大的子節點和當前根節點交換
if (temp < a[child])
else
//如果子節點大於根節點,那麼需要將根節點置換到對應的較大的子節點處
a[child] = temp;
//並且將當前的i變成child的值,因為此時要對child為根節點的子樹進行堆調整
root = child;
} }
public static void heapsort(int a)
system.out.println("大頂堆");
display(a);
//公升序排列陣列
for (int i = a.length - 1; i > 0; i--) }
public static void mergesort(int a, int begin, int end)
int middle = (begin + end) / 2;
//遞迴的將a[begin,...middle]歸併為有序的b[begin,...middle]
mergesort(a, begin, middle);
//遞迴的將a[middle + 1,...end]歸併為有序的b[middle + 1,...end]
mergesort(a, middle + 1, end);
//將兩部分進行合併
merge(a, begin, middle, end); }
public static void merge(int a, int begin, int middle, int end)
else
} while(i <= middle)
while(j <= end)
for (int j2 = 0; j2 < temp.length; j2++) }
public static void display(int a)
system.out.println();
} public static void testbubble() ;
int b = ;
display(a);
bubble(a);
display(a);
display(b);
bubble(b);
display(b);
} public static void testselection() ;
int b = ;
display(a);
selection(a);
display(a);
display(b);
selection(b);
display(b);
} public static void testinsertsort();
int b = ;
display(a);
insertsort(a);
display(a);
display(b);
insertsort(b);
display(b); }
public static void testhellsort();
int b = ;
display(a);
hellsort(a);
display(a);
display(b);
hellsort(b);
display(b); }
public static void testbinsertsort();
int b = ;
display(a);
binaryinsert(a);
display(a);
display(b);
binaryinsert(b);
display(b); }
public static void testquicksort();
int b = ;
display(a);
quicksort(a, 0, a.length - 1);
display(a);
display(b);
quicksort(b, 0, b.length - 1);
display(b); }
public static void testheapsort();
int b = ;
display(a);
heapsort(a);
display(a);
display(b);
heapsort(b);
display(b); }
public static void testmergesort();
int b = ;
display(a);
mergesort(a, 0, a.length - 1);
display(a);
display(b);
mergesort(b, 0, b.length - 1);
display(b); }
public static void main(string args)
}
常用排序演算法總結 選擇排序 java實現
選擇排序 selection sort 是一種簡單直觀的排序演算法。它的工作原理如下。首先在未排序序列中找到最小 大 元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小 大 元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。選擇排序的主要優點與資料移動有關。如果某...
常用排序演算法java實現
氣泡排序 平均時間複雜度o n n 最好o n 最壞o n n 空間複雜度o 1 public void bubblesort int a show a 插入排序 平均時間複雜度o n n 最好o n 最壞o n n 空間複雜度o 1 public void insertsort int a a j...
排序演算法總結(java實現)
排序演算法的分類如下 1.插入排序 直接插入排序 折半插入排序 希爾排序 2.交換排序 冒泡泡排序 快速排序 3.選擇排序 直接選擇排序 堆排序 4.歸併排序 5.基數排序。關於排序方法的選擇 1 若n較小 如n 50 可採用直接插入或直接選擇排序。當記錄規模較小時,直接插入排序較好 否則因為直接選...