常見的排序演算法 Java實現

2021-08-05 19:38:28 字數 2073 閱讀 7497

最近在準備面試,回顧了一下之前學習的幾種排序演算法,並參考材料嘗試實現。現在此記錄一下,以後忘了可以回顧。

直接貼上**(有許多值得優化的地方)。

package hpp.sort;

/** * created by hpp on 2017/8/4.

*/public class sorttest ;

// insertsort(array,array.length);

// insertsort2(array,array.length);

// shellsort(array);

// bubblesort(array);

// quicksort(array, 0, array.length - 1);

// selectsort(array);

// heapsort(array);

mergesort(array);

for(int item:array)

}/**

* 直接插入排序,空間複雜度o(1),時間複雜度o(n²)

* 適用於基本有序的排序表和資料量不大的排序表

*/public static void insertsort(int array, int n)else

}for(j = i-1;j>=high+1;--j)

array[high+1] = temp;}}

/*** 希爾排序

* @param arr

*/private static void shellsort(int arr) }}

}/**

* 快排,空間複雜度最壞o(n),平均o(logn),時間複雜度最壞情況下o(n²),平均情況下o(nlogn),不穩定

*/public static void quicksort(int array,int left,int right)

}// 根據輸入陣列構建乙個最大堆

private static void buildmaxheap(int array)

}//堆調整,使其生成最大堆

private static void maxheapify(int data, int parentnodeindex, int heapsize)

// 如果右子節點比最大節點還大,那麼最大節點應該是右子節點

if (rightchildnodeindex <= heapsize && data[rightchildnodeindex - 1]>data[largestnodeindex - 1])

// 最後,如果最大節點和父節點不一致,則交換他們的值

if (largestnodeindex != parentnodeindex)

}/**

* 2-路歸併排序,空間複雜度o(n),時間複雜度o(nlogn)

*/public static void mergesort(int data)

public static void sort(int data, int left, int right)

/*** 將兩個陣列進行歸併,歸併前面2個陣列已有序,歸併後依然有序

* @param data 陣列物件

* @param left 左陣列的第乙個元素的索引

* @param center 左陣列的最後乙個元素的索引,center+1是右陣列第乙個元素的索引

* @param right 右陣列最後乙個元素的索引

*/public static void merge(int data, int left, int center, int right) else

}// 剩餘部分依次放入臨時陣列(實際上兩個while只會執行其中乙個)

while (mid <= right)

while (left <= center)

// 將臨時陣列中的內容拷貝回原陣列中

// (原left-right範圍的內容被複製回原陣列)

while (tmp <= right)

}}

java實現常見的幾種排序演算法

public static void selectsort int array if i min public static void bubble int array if flag false public static void insertsort int numbers numbers j...

常見的排序演算法總結(JAVA實現)

插入排序 直接插入排序 希爾排序。選擇排序 直接選擇排序 堆排序。交換排序 氣泡排序 快速排序。歸併排序。基數排序。思路 對於一組資料,先將第乙個和第二個數排序,再將第三個數插入之前已經有序序列中形成新的有序序列,以此類推。也就是對於第n個數的排序,是將這第n個數插入到前n 1個數的有序序列中,從而...

Java常見的排序演算法

氣泡排序演算法的運作如下 假定從後往前 比較相鄰的元素。如果第乙個比第二個大或小,就交換他們兩個的位置 將序列中所有元素兩兩比較,將最大的放在最後面。將剩餘序列中所有元素兩兩比較,將最大的放在最後面。重複第二步,直到只剩下乙個數。實現 1.設定迴圈次數。2.設定開始比較的位數,和結束的位數。3.兩兩...