常用演算法總結 Java實現

2021-07-13 20:53:01 字數 4186 閱讀 4462

寫了很多次關於排序演算法的**,但是由於沒有儲存,都沒有流傳下來。寫到部落格上,總不至於丟了吧。^_^

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 可採用直接插入或直接選擇排序。當記錄規模較小時,直接插入排序較好 否則因為直接選...