講講幾種常見(jiàn)的排序算法(一)
堆排序
思路:構(gòu)建一個(gè)小頂堆,小頂堆就是棵二叉樹(shù),他的左右孩子均大于他的根節(jié)點(diǎn)(大頂堆反之)。
構(gòu)建完一個(gè)小頂堆后,開(kāi)始排序。 將最后一個(gè)節(jié)點(diǎn)和第一個(gè)節(jié)點(diǎn)交換位置(根節(jié)點(diǎn)是最小的,最小的頂點(diǎn)放到了后面),交換后進(jìn)行調(diào)整,保持小頂堆(次小的頂點(diǎn)到了根節(jié)點(diǎn))。
依次執(zhí)行下去,這樣每一次交換將最小的頂點(diǎn)的放到了最后,所以最后數(shù)組會(huì)從大到小排列。
public static void heapSort(int array[]) { int j=array.length; //構(gòu)建堆 for (int i = j/2-1; i >=0; i--) { f(i,j,array); } //堆排序,從后面的節(jié)點(diǎn)開(kāi)始更第一個(gè)節(jié)點(diǎn)交換位置,然后進(jìn)行調(diào)整,這樣數(shù)組將從大到小排列 for (int i = j-1; i>=0; i--) {// System.out.println(array[0]); swap(array,i,0); f(0,i,array); } } public static void f(int low,int high,int array[]) { int i=low; int j=2*i+1; int temp=array[i]; &nbs