排序_選擇排序(簡單選擇排序&堆排序)

簡單選擇排序(直接選擇排序):

基本思路:
第一次從A[0..n-1]中選取最小值升筏,與A[0]交換童叠;
第二次從A[1..n-1]中選取最小值,與A[1]交換漠酿;
第i次從A[i-1..n-1]中選取最小值,與A[i-1]交換吉嚣,
......
n個記錄的文件的直接選擇排序可經過n-1趟直接選擇排序得到有序結果梢薪。
實現(xiàn)代碼:(C#)

static void SelectSort(int[] array)
{
    int pos;    //用于記錄的下標
    for (int i = 0; i < array.Length - 1; i++)
    {
        pos = i;
        for (int j = i + 1; j < array.Length; j++)//從第二個下標開始,遍歷后面所有的數(shù)
        {
            //比pos小尝哆,則記錄下標秉撇,直到遍歷完,找到最小值
            if (array[j] < array[pos]) pos = j;     
        }
        if (pos != i)   //交換操作
        {
            int temp = array[i];
            array[i] = array[pos];
            array[pos] = temp;
        }
    }
}

總結:
1秋泄、若初始對象是有序的琐馆,則對象移動次數(shù)為0,達到最泻阈颉瘦麸;但比較次數(shù)還是多,且與初始對象排列無關歧胁;時間效率:O(n2)


堆排序:

什么是堆:
一個k[0]到k[n-1]的序列滿足以下條件稱為堆


將該序列順次排成一棵完全二叉樹滋饲,則此樹的特點是:
樹中所有結點的值均大于(或小于)其左右孩子,此樹的根結點(即堆頂)必最大(或最泻拔 )屠缭。

如何建堆:
步驟:從最后一個非終端結點開始往前逐步調整,讓每個雙親大于(或小于)子女崭参,直到根結點為止呵曹。(終端節(jié)點即葉子,沒有任何子女)何暮;
根據(jù)性質奄喂,最后非終端節(jié)點下標必為 (n-1)/2

:關鍵字序列T= (21海洼,25砍聊,49,25*贰军,16玻蝌,08),請建大根堆词疼。
解:為便于理解俯树,先將原始序列畫成完全二叉樹的形式:
這樣可以很清晰地從 (n-1)/2 開始調整。


怎樣進行堆排序:
方法:將當前頂點與堆尾記錄交換贰盗,然后仿建堆動作重新調整许饿,如此反復直至排序結束。
例:對剛建好的大根堆進行排序:

動畫演示

代碼實現(xiàn):(C#)
創(chuàng)建堆:

//創(chuàng)建堆
//n為需要建堆的元素個數(shù)舵盈,root_index為傳入的非葉結點下標
public static void CreateHeap(int[] nums, int n, int root_index)
{
    int i, j;
    int temp;
    i = root_index;
    j = 2 * i + 1;  //左子結點下標
    temp = nums[i];
    while (j < n)
    {
        if (j < n - 1 && nums[j] < nums[j + 1]) j++;    //獲取左右葉結點中最大的一個
        //因為初始化是從下往上創(chuàng)建陋率,下面已經滿足堆的狀態(tài)球化,
        //所以遇到父節(jié)點大于葉結點直接退出循環(huán)即可
        if (temp > nums[j])
        {
            break;
        }
        else
        {
            //繼續(xù)往下比較
            nums[i] = nums[j];
            i = j;
            j = 2 * j + 1;
        }
    }
    nums[i] = temp;
}

初始化堆:

public static void InitHeap(int[] nums)
{
    //從最后一個非葉結點開始往前,一直到根節(jié)點
    for (int i = (nums.Length - 1) / 2; i >= 0; i--)
    {
        CreateHeap(nums, nums.Length, i);
    }
}

堆排序實現(xiàn):

public static void HeapSort(int[] nums)
{
    int temp;
    InitHeap(nums);
    for (int i = nums.Length - 1; i > 0; i--)
    {
        //根節(jié)點與最后一個葉結點交換
        temp = nums[0];
        nums[0] = nums[i];
        nums[i] = temp;
        CreateHeap(nums, i, 0);
    }
}

總結:
1瓦糟、時間效率: O(nlog2n)筒愚。因為整個排序過程中需要調用n-1次堆頂點的調整,而每次堆排序算法本身耗時為log2n
2菩浙、優(yōu)點:對小文件效果不明顯巢掺,但對大文件有效。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末劲蜻,一起剝皮案震驚了整個濱河市陆淀,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌先嬉,老刑警劉巖轧苫,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異疫蔓,居然都是意外死亡含懊,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門鳄袍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來绢要,“玉大人吏恭,你說我怎么就攤上這事拗小。” “怎么了樱哼?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵哀九,是天一觀的道長。 經常有香客問我搅幅,道長阅束,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任茄唐,我火速辦了婚禮息裸,結果婚禮上,老公的妹妹穿的比我還像新娘沪编。我一直安慰自己呼盆,他們只是感情好,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布蚁廓。 她就那樣靜靜地躺著访圃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪相嵌。 梳的紋絲不亂的頭發(fā)上腿时,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天况脆,我揣著相機與錄音,去河邊找鬼批糟。 笑死格了,一個胖子當著我的面吹牛,可吹牛的內容都是我干的跃赚。 我是一名探鬼主播笆搓,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼纬傲!你這毒婦竟也來了满败?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤叹括,失蹤者是張志新(化名)和其女友劉穎算墨,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體汁雷,經...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡净嘀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了侠讯。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挖藏。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖厢漩,靈堂內的尸體忽然破棺而出膜眠,到底是詐尸還是另有隱情,我是刑警寧澤溜嗜,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布宵膨,位于F島的核電站,受9級特大地震影響炸宵,放射性物質發(fā)生泄漏辟躏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一土全、第九天 我趴在偏房一處隱蔽的房頂上張望捎琐。 院中可真熱鬧,春花似錦裹匙、人聲如沸瑞凑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拨黔。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間篱蝇,已是汗流浹背贺待。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留零截,地道東北人麸塞。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像涧衙,于是被迫代替她去往敵國和親哪工。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內容