• <em id="6vhwh"><rt id="6vhwh"></rt></em>

    <style id="6vhwh"></style>

    <style id="6vhwh"></style>
    1. <style id="6vhwh"></style>
        <sub id="6vhwh"><p id="6vhwh"></p></sub>
        <p id="6vhwh"></p>
          1. 国产亚洲欧洲av综合一区二区三区 ,色爱综合另类图片av,亚洲av免费成人在线,久久热在线视频精品视频,成在人线av无码免费,国产精品一区二区久久毛片,亚洲精品成人片在线观看精品字幕 ,久久亚洲精品成人av秋霞

            選擇排序(選擇排序法C語言代碼)

            更新時間:2023-03-01 13:30:55 閱讀: 評論:0

            選擇排序

            選擇排序也是利用了“擋板法”這個經典思想。

            擋板左邊是已排序區間,右邊是未排序區間,那么每次的“選擇”是去找右邊未排序區間的最小值,找到之后和擋板后面的第一個值換一下,然后再把擋板往右移動一位,保證排好序的這些元素在擋板的左邊。

            比如例子:{5, 2, 0, 1}

            我們用一個擋板來分隔數組是否排好序,用指針 j 來尋找未排序區間的最小值;

            第一輪 j 最初指向 5,然后遍歷整個未排序區間,最終指向 0,那么 0 就和擋板后的第一個元素換一下,也就是和 5 交換一下位置,擋板向右移動一位,結束第一輪。

            第二輪,j 從擋板后的2開始遍歷,最終指向1,然后1和擋板后的第一個元素 2 換一下,擋板向右移動一位,結束第二輪。

            第三輪,j 從2開始遍歷,最終指向2,然后和2自己換一下,擋板向右移動一位,結束第三輪。

            還剩一個元素,不用遍歷了,就結束了。

            選擇排序與之前的插入排序對比來看,要注意兩點:

            擋板必須從 0 開始,而不能從 1 開始。雖然在這兩種算法中,擋板的物理意義都是分隔已排序和未排序區間,但是它們的已排序區間里放的元素的意義不同:選擇排序是只能把當前的最小值放進來,而不能放其他的;插入排序的第一個元素可以為任意值。

            所以選擇排序的擋板左邊最開始不能有任何元素。

            在外層循環時,選擇排序的最后一輪可以省略,因為只剩下最大的那個元素了;插入排序的最后一輪不可省略,因為它的位置還沒定呢。

            class Solution { public void lectionSort(int[] input) { if(input == null || input.length <= 1) { return; } for(int i = 0; i < input.length - 1; i++) { int minValueIndex = i; for(int j = i + 1; j < input.length; j++) { if(input[j] < input[minValueIndex]) { minValueIndex = j; } } swap(input, minValueIndex, i); } } private void swap(int[] input, int x, int y) { int tmp = input[x]; input[x] = input[y]; input[y] = tmp; }}

            時間復雜度

            最內層的 if 語句每執行一次是 O(1) ,那么要執行多少次呢?

            當 i = 0 時,是 n-1 次;當 i = 1 時,是 n-2 次;…最后是 1 次;

            所以加起來,總共是:(n-1) + (n-2) + … + 1 = n*(n-1) / 2 = O(n^2)

            是這樣算出來的,而不是一拍腦袋說兩層循環就是 O(n^2).

            空間復雜度

            這個很簡單,最多的情況是 call swap() 的時候,然后 call stack 上每一層就用了幾個有限的變量,所以是 O(1)。

            那自然也是原地排序算法了。

            穩定性

            這個答案是否定的,選擇排序并沒有穩定性。

            因為交換的過程破壞了原有的相對順序,比如: {5, 5, 2, 1, 0} 這個例子,第一次交換是 0 和 第一個 5 交換,于是第一個 5 跑到了數組的最后一位,且再也無翻身之地,所以第一個 5 第二個 5 的相對順序就已經打亂了。

            本文發布于:2023-02-28 20:00:00,感謝您對本站的認可!

            本文鏈接:http://www.newhan.cn/zhishi/a/167764865576182.html

            版權聲明:本站內容均來自互聯網,僅供演示用,請勿用于商業和其他非法用途。如果侵犯了您的權益請與我們聯系,我們將在24小時內刪除。

            本文word下載地址:選擇排序(選擇排序法C語言代碼).doc

            本文 PDF 下載地址:選擇排序(選擇排序法C語言代碼).pdf

            標簽:語言   代碼
            相關文章
            留言與評論(共有 0 條評論)
               
            驗證碼:
            推薦文章
            排行榜
            Copyright ?2019-2022 Comsenz Inc.Powered by ? 實用文體寫作網旗下知識大全大全欄目是一個全百科類寶庫! 優秀范文|法律文書|專利查詢|
            主站蜘蛛池模板: 国产高潮刺激叫喊视频| 亚洲一区二区日韩综合久久| 亚洲av二区国产精品| 激情六月丁香婷婷四房播| 国产av成人精品播放| 超碰伊人久久大香线蕉综合| 丝袜a∨在线一区二区三区不卡 | 日韩精品一区二区av在线| 日韩不卡二区三区三区四区| 亚洲第一极品精品无码久久| 双乳奶水饱满少妇呻吟免费看| 4480yy亚洲午夜私人影院剧情| 自拍日韩亚洲一区在线| 久久青青草原亚洲AV无码麻豆| 亚洲一区二区三区av激情| 久久香蕉国产线看观看怡红院妓院| 国产av普通话对白国语| 国产精品女熟高潮视频| 欧美国产日韩亚洲中文| 五月婷婷久久中文字幕| 国产精品亚洲国际在线看| 扒开双腿猛进入喷水高潮叫声| 少妇久久久被弄到高潮| 伊人欧美在线| 国产老熟女狂叫对白| 人人做人人澡人人人爽| 最新亚洲人成网站在线影院 | 色爱综合激情五月激情| 风韵丰满熟妇啪啪区老老熟妇 | 乱人伦人妻系列| 脱了老师内裤猛烈进入| 成人午夜免费无码视频在线观看| 亚洲国产精品第一区二区| 精品无码久久久久成人漫画| 亚洲高清免费在线观看| 亚洲成av人片不卡无码久久| 国内精品久久久久影视| 亚洲高潮喷水无码AV电影| 九九热在线免费视频播放| 亚洲AV高清一区二区三区尤物| 九九热精彩视频在线免费|