講講幾種常見(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ì)從大到小排列。
大學(xué)生就業(yè)培訓(xùn),高中生培訓(xùn),在職人員轉(zhuǎn)行培訓(xùn),企業(yè)團(tuán)訓(xùn)

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