亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        排序算法時間復(fù)雜度比較試驗(yàn)設(shè)計(jì)

        2019-09-07 07:13:30任洛漪電子科技大學(xué)成都學(xué)院計(jì)算機(jī)系
        數(shù)碼世界 2019年9期
        關(guān)鍵詞:逆序正序復(fù)雜度

        任洛漪 電子科技大學(xué)成都學(xué)院 計(jì)算機(jī)系

        1 引言

        各種排序算法時間復(fù)雜度比較部分是《數(shù)據(jù)結(jié)構(gòu)》課程的重難點(diǎn)。如果光講理論,學(xué)生理解比較膚淺,因此我們嘗試在教學(xué)中用實(shí)驗(yàn)的方法讓學(xué)生切身感受到各種排序算法的區(qū)別。

        2 時間測量方法的準(zhǔn)備

        首先需要找到精確的時間測量方法。

        常規(guī)的計(jì)時用是頭文件中的clock()函數(shù),精度為1ms,但對于插入排序和冒泡排序?qū)?000 個正序序列排序的情況,耗時只有幾十微秒,故需要設(shè)計(jì)精確到微秒的測量方式。

        代碼如下

        double run_time;

        _LARGE_INTEGER time_start;

        _LARGE_INTEGER time_over;

        double dpFreq;

        _LARGE_INTEGER f;

        void StartTimer() {

        QueryPerformanceCounter(&f);

        dpFreq = (double)f.QuadPart;

        QueryPerformanceCounter(&time_start);}

        void EndTimer() {

        QueryPerformanceCounter(&time_over);

        run_time = 1000000 * (time_over.QuadPart - time_start.QuadPart) / dpFreq;}

        實(shí)際使用中,在做排序之前調(diào)用StartTimer()開始計(jì)時,排序之后立刻調(diào)用EndTimer()結(jié)束計(jì)時。時間間隔記錄到全局變量run_timer 中。

        3 測試數(shù)據(jù)的準(zhǔn)備

        由于初始記錄的關(guān)鍵字的分布情況不同,排序算法的耗時也不同。故需要準(zhǔn)備以下三種序列。

        a)、正序初始序列,存放關(guān)鍵字遞增的數(shù)據(jù)序列。

        b)、逆序初始序列,存放關(guān)鍵字遞減的數(shù)據(jù)序列。注意,由于排序基本都是原地重排,為了避免上一次排序的干擾,每次對逆序序列排序之前都必須重新生成逆序序列。

        c)、隨機(jī)數(shù)初始序列,存放關(guān)鍵字為隨機(jī)數(shù)的數(shù)據(jù)序列。隨機(jī)序列進(jìn)行比較之前需要生成一個隨機(jī)序列并將其復(fù)制多份,每個排序方式排一份數(shù)據(jù),以便讓每種排序方法都針對相同序列并互不干擾。

        4 實(shí)驗(yàn)設(shè)計(jì)

        基于以問題為導(dǎo)向,試驗(yàn)將回答以下問題:

        (1)對于正序序列的表,最省時間的排序方式為哪種算法?最費(fèi)時間的又是哪種算法?

        為此我們設(shè)計(jì)了了下列實(shí)驗(yàn),首先對正序序列賦值,然后使用直接插入排序、冒泡排序、簡單選擇排序、快速排序、堆排序、兩路歸并排序分別對該序列進(jìn)行排序。并分別計(jì)時,生成結(jié)果如下:

        圖1 正序序列情況下各種排序算法時間復(fù)雜度比較

        可見,冒泡排序只需0.026 毫秒,在六種排序算法中耗時最少,因?yàn)檎蚯闆r下,它的時間復(fù)雜度為O(n)。

        同時可見,與冒泡法時間復(fù)雜度相同的直接插入法,耗時更大。因?yàn)殡m然執(zhí)行次數(shù)相同,但每次循環(huán)中,直接插入法的還需執(zhí)行移動,而同等情況下冒泡算法幾乎沒有移動次數(shù),故速度更快。

        并且對于正序序列,基準(zhǔn)為第一個元素的快速排序并不占優(yōu)勢,它的耗時僅次于簡單選擇排序,因?yàn)檫@種情況下,快速排序?qū)?yīng)的二叉排序樹退化為一顆單枝樹,時間復(fù)雜度為O(n2)。

        對于正序序列,最費(fèi)時的是簡單選擇,因?yàn)橥瑯拥膶?shí)際復(fù)雜度O(n2)下,它的比較次數(shù)比快速排序要多。

        (2)對于逆序序列,哪種算法最耗時?哪種最省時?實(shí)驗(yàn)結(jié)果為

        圖2 逆序序列情況下各種排序算法時間復(fù)雜度比較

        可見,對于1000 個數(shù)的逆序序列,堆排序和歸并排序時間性能最好,時間復(fù)雜度為O(nlog2n)。直接插入,冒泡,簡單選擇和快速排序的耗時較長,時間復(fù)雜度都為O(n2)。

        在后四個算法中,最快的是選擇排序,因其移動的次數(shù)最少。快速排序在這種情況下比較和移動的次數(shù)類似于選擇排序,但由于使用遞歸需要系統(tǒng)分配時間調(diào)用遞歸棧,所以耗時比選擇排序略高。冒泡和插入由于在逆序情況下移動和比較的次數(shù)都達(dá)到了最大值,所以排序性能不好。

        (3)對于隨機(jī)序列,哪種算法最耗時?哪種最省時?實(shí)驗(yàn)結(jié)果為

        圖3 隨機(jī)序列情況下各種排序算法時間復(fù)雜度比較

        可見,對于1000 個數(shù)以內(nèi)的隨機(jī)序列,快速排序、堆排序和歸并排序時間性能最好。因?yàn)檫@種情況下,時間復(fù)雜度為O(nlog2n)。直接插入,冒泡,簡單選擇的耗時都較長,因?yàn)檫@種情況下時間復(fù)雜度都為O(n2)。

        5 結(jié)論

        通過實(shí)驗(yàn),學(xué)生對下圖各種排序的時間性能有了更直觀和深入的理解。教學(xué)收到了較好的效果。

        猜你喜歡
        逆序正序復(fù)雜度
        有界線性算子的Drazin逆的逆序律
        關(guān)于矩陣廣義BottDuffin逆的逆序律
        一種低復(fù)雜度的慣性/GNSS矢量深組合方法
        新中國70年漢語逆序詞研究(1949—2019)
        對外漢語教學(xué)中AB-BA式逆序詞教學(xué)分析
        淺談?wù)蜇?fù)序和零序
        求圖上廣探樹的時間復(fù)雜度
        正序電壓幅值檢測及諧波抑制的改進(jìn)
        某雷達(dá)導(dǎo)51 頭中心控制軟件圈復(fù)雜度分析與改進(jìn)
        出口技術(shù)復(fù)雜度研究回顧與評述
        色综合天天综合欧美综合| 亚洲av一区二区国产精品| 国产精品亚洲av一区二区三区| 一区二区三区国产在线视频| 色偷偷偷久久伊人大杳蕉| 亚洲色图+国产精品| 蜜桃一区二区免费视频观看 | 美女露内裤扒开腿让男人桶无遮挡 | 国产一级毛片AV不卡尤物| 免费美女黄网站久久久| 亚洲97成人在线视频| 免费高清av一区二区三区| 日本一区二区不卡视频| 国产传媒剧情久久久av| 精品高清免费国产在线| 日产亚洲一区二区三区| 一本大道东京热无码中字 | 熟妇无码AV| 日韩va高清免费视频| 国产一区二区三区日韩精品| 国产精成人品| 69天堂国产在线精品观看| 国产一区二区资源在线观看| 国产欧美精品一区二区三区四区 | 五月激情四射开心久久久| 影视av久久久噜噜噜噜噜三级 | 少妇高潮精品正在线播放| 日本顶级metart裸体全部| 久久久精品2019免费观看 | 国产99久久久国产精品免费| 亚洲精品国产精品乱码视色| av香港经典三级级 在线| 久久综合给合久久狠狠狠9| 久久精品国产亚洲av网站| 国产精品久久久久高潮| 亚洲av之男人的天堂| 日本人妻伦理片在线观看| 国产精品女老熟女一区二区久久夜| 国产在线视频一区二区三区| 国内精品久久久久国产盗摄| 高清在线有码日韩中文字幕|