最近在準備面試,回顧了一下之前學習的幾種排序演算法,並參考材料嘗試實現。現在此記錄一下,以後忘了可以回顧。
直接貼上**(有許多值得優化的地方)。
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.兩兩...