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

        ?

        排序的常用方法及其改進

        2016-03-24 02:43:58胡佳
        現(xiàn)代計算機 2016年8期
        關(guān)鍵詞:胡佳結(jié)點步長

        胡佳

        (南昌師范學(xué)院數(shù)學(xué)與計算機科學(xué)系,南昌 330000)

        排序的常用方法及其改進

        胡佳

        (南昌師范學(xué)院數(shù)學(xué)與計算機科學(xué)系,南昌 330000)

        介紹幾種常用的排序方法及其改進,有簡單的直接插入排序和改進的希爾排序;有簡單的交換氣泡排序以及改進的快速排序;還有單向掃描的改進的氣泡排序。每種排序都給出它的主要思想,排序的主要過程和代碼,改進的算法給出時效的分析。

        排序;改進;時效分析

        0 引言

        在日常生活中我們有很多需要排序的工作,假如是少量的數(shù)據(jù)進行排序,那我們在可以通過肉眼來判斷和安放數(shù)據(jù),但是如果數(shù)據(jù)量很大的時候,用日常的方法就難以排放數(shù)據(jù),這時候我們可以給計算機一個算法,讓計算機來給大批量的數(shù)據(jù)進行排序。

        C語言程序設(shè)計課程教學(xué)中,我們就學(xué)習(xí)過排序算法中的一種冒泡排序,實際上還有很多種排序的方法,它們的穩(wěn)定性和效率都不一樣。這部分內(nèi)容我們是方在數(shù)據(jù)結(jié)構(gòu)課程中介紹。這里我們首先給排序下一個定義,對于n個結(jié)點組成的線性表(a0,a1,…,an-1),按照結(jié)點中某個字段的值的遞增或遞減的次序,對列表中的各個結(jié)點進行重新排列的過程,我們可以稱為排序。排序的方法分為內(nèi)部排序和外部排序兩大類。內(nèi)部排序指得是排序的整個時間段所有的結(jié)點都存放在內(nèi)存,調(diào)整待排序的結(jié)點的位置也是在內(nèi)存;外部排序指的是排序期間,有大部分的結(jié)點存放在外存,排序的過程需要借助內(nèi)存來調(diào)整存放在外存正在等待排序的結(jié)點。

        假設(shè)數(shù)據(jù)結(jié)點A0,A1,…,An-1的關(guān)鍵字的值依次是key0,key1,…,keyn-1。這里數(shù)據(jù)結(jié)點都是線性結(jié)構(gòu),在實際應(yīng)用中可以用數(shù)組來實現(xiàn)。因此數(shù)據(jù)結(jié)點的排序的過程就是為了確定關(guān)鍵字下標(biāo)排列的過程,即tag[0],tag[1],…tag[n-1](0<=tag[i]<=n-1,0<=i<=n-1),0<=i<= n-1,當(dāng)i≠j時,tag[i]≠tag[j]),所以當(dāng)關(guān)鍵字相等時,數(shù)據(jù)結(jié)點通過某種排序方法排序后,數(shù)據(jù)結(jié)點的先后次序依然不變。即keytag[i]=keytag[j](tag[i] tag[j]),在排序后,對應(yīng)的keytag[i]在keytag[j]的前面或者keytag[j]在keytag[i],這種情況為穩(wěn)定的排序,否則為不穩(wěn)定的排序。我們在選擇和分析排序算法時,除了主要考慮時間復(fù)雜度外,還要考慮算法的穩(wěn)定性。常見的簡單的插入排序、選擇排序和氣泡排序都是穩(wěn)定的排序。下面我們介紹在此基礎(chǔ)上看這些排序的改進方法和具體的代碼實現(xiàn),并把它們做一個比對。這里指定排序的次序為從小到大。

        1 排序問題的簡單算法和改進算法

        首先看簡單的插入排序,它是穩(wěn)定的,不僅適用于線性表的順序存儲,而且適用于線性表的鏈?zhǔn)酱鎯?。這里我們用順序存儲的數(shù)組來實現(xiàn)直接插入,它的算法思想很簡單,就是先將原始數(shù)據(jù)結(jié)點的第一個結(jié)點元素看成一個有序的序列,然后依次取原始數(shù)據(jù)結(jié)點序列的第二個、第三個依次插入,直到插入最后一個數(shù)據(jù)結(jié)點為止。

        以下是實現(xiàn)功能模塊的源代碼:

        該算法的基本操作是兩個數(shù)據(jù)結(jié)點之間的比較,排序經(jīng)過了n-1次的插入,在每輪的插入過程中要進行n-x次的比較,x表示的是第幾輪的插入。整個排序的過程需要最多需要經(jīng)過∑_1^(n-1)x次的比較,即n(n-1)/2,比較次數(shù)最少的為n-1,這種排序適用于數(shù)據(jù)結(jié)點個數(shù)比較少的情況。

        簡單直接的插入排序只是比較相鄰的兩個數(shù)據(jù)結(jié)點,一次比較僅僅把數(shù)據(jù)結(jié)點移動一個位置而已。如果要對位置相隔較遠(yuǎn)的數(shù)據(jù)結(jié)點進行比較,并且使得結(jié)點在比較以后能夠一次跨越較大的距離,這就需要把數(shù)據(jù)結(jié)點中值較小的結(jié)點盡快的往前移動,值較大的盡量快地往后進行移動,以此來提高排序的速度。這就需要對簡單的插入排序進行改進。改進的思想如下:首先以dis1為步長,并且dis1>0&&dis1

        接著在每組中進行簡單的插入排序。然后以dis2為步長,并且dis2>0&&dis2

        由于步長的不斷減少,數(shù)據(jù)結(jié)點越來越有序,因而數(shù)據(jù)結(jié)點的比較次數(shù)和移動次數(shù)也越來越少。這里步長序列的選取并無定論,但是我們可以知道這種排序的總比較次數(shù)和總移動次數(shù)要比簡單選擇排序少很多,且它是一種不穩(wěn)定的排序。以下是實現(xiàn)功能模塊的源代碼:

        改進的排序時效分析很難,關(guān)鍵碼的比較次數(shù)與記錄移動次數(shù)依賴于步長因子序列的選取,當(dāng)分組較多時,組內(nèi)元素較少;一趟中直接插入排序元素少,循環(huán)次數(shù)就少;當(dāng)分組較少時,組內(nèi)元素增多,但已接近有序,循環(huán)次數(shù)并不增加。因此,希爾排序的時間復(fù)雜性在O(nlog2n)和O(n2)之間。

        現(xiàn)在我們將隨機生成50個整數(shù),然后對上面的算法進行檢驗,檢驗代碼如下:

        驗證的結(jié)果如圖1所示。

        圖1

        我們將看一種冒泡排序的改進,這種冒泡排序只允許從前向后掃描,它的改進算法思想為,在從前往后一輪比較以后,記錄下最后往下調(diào)的數(shù)據(jù)結(jié)點的位置,若這個數(shù)據(jù)結(jié)點的位置是tag,那么下一遍的范圍在0-tag,假如某輪沒有交換的數(shù)據(jù)結(jié)點,那么整個排序就結(jié)束。所以整個排序有可能少于n-1輪,這就大大的提高的排序的效率,以下是實現(xiàn)功能代碼。

        現(xiàn)在我們將隨機生成50個整數(shù),然后對上面的算法進行檢驗,檢驗代碼如下:

        驗證的結(jié)果如圖2所示。

        圖2

        我們首先選中一個數(shù)據(jù)結(jié)點X,把它作為標(biāo)桿,然后從區(qū)間兩端向中間進行比較和交換,使得X前面的數(shù)據(jù)結(jié)點都比X小,而X后面的數(shù)據(jù)結(jié)點都不比X小,然后我們把X放在前后兩部分的分界處,這樣就可以將整個區(qū)間分成兩個子區(qū)間。按照這樣方法一直做下去,直到區(qū)間為空位置,這時的序列就變成了有序的序列集合。它實際上是一種改進了的交換排序。以下是實現(xiàn)功能模塊的源代碼:

        從空間復(fù)雜性看,改進的排序是遞歸的,每層遞歸調(diào)用時的指針和參數(shù)均要用棧來存放,,存儲開銷在理想情況下為O(log2n),在最壞情況下為O(n)。

        從時間復(fù)雜性看,在n個記錄的排序表中,一次劃分平均有小于或等于n次關(guān)鍵碼比較,時間復(fù)雜性為O(n)。理想情況下,每次劃分,正好將分成兩個等長的子序列,則需要的排序趟數(shù)為小于或等于log2n,故時間性能為O(nlog2n)。

        最壞情況下,每次劃分,只得到一個子序列,時間復(fù)雜性為O(n2)。

        通常情況上,快速排序被認(rèn)為在同數(shù)量級(O(nlog2n))的內(nèi)排序方法中平均性能最好的。

        這種改進的排序是一個不穩(wěn)定的排序方法。

        2 結(jié)語

        以上介紹了主要介紹了幾種常用的排序方法及其改進,有簡單的直接插入排序和改進的希爾排序;有單向掃描的改進的冒泡排序;有雙向掃描的改進的交換排序。每種排序都給出它的主要思想,排序的主要過程和代碼,以及時效的分析,希望對大家日常生活中的排序應(yīng)用有所幫助。

        [1]胡佳.高職高專《數(shù)據(jù)結(jié)構(gòu)》課程教學(xué)改革探析[J].江西教育學(xué)院學(xué)報,2012(6).

        [2]胡佳.幾種典型關(guān)聯(lián)規(guī)則算法的分析與比較[J].現(xiàn)代計算機(專業(yè)版),2011.

        Common Methods of Sorting and Its Improvement

        HU Jia

        (Department of Math and Computer Science,Nanchang Normal University,Nanchang 330000)

        Introduces several commonly used methods and their improvements,there are simple direct insertion sort and improved shell sort;there are a simple exchange bubble sort and improved quick sort;there is the improved bubble sort which scans for one way.Gives the main idea of each sort,main process and code,and the time analysis of improved algorithm.

        Sort;Improvement;Time Analysis

        1007-1423(2016)08-0061-05

        10.3969/j.issn.1007-1423.2016.08.013

        2015-12-24

        2016-02-28

        2013年江西省高等學(xué)校教學(xué)改革研究課題、2014年江西省社會科學(xué)規(guī)劃項目

        胡佳(1982-),南昌新建人,碩士講師研究方向為計算機教育和數(shù)據(jù)挖掘

        猜你喜歡
        胡佳結(jié)點步長
        媽媽家的門
        基于Armijo搜索步長的BFGS與DFP擬牛頓法的比較研究
        山歌
        Ladyzhenskaya流體力學(xué)方程組的確定模與確定結(jié)點個數(shù)估計
        基于逐維改進的自適應(yīng)步長布谷鳥搜索算法
        一種新型光伏系統(tǒng)MPPT變步長滯環(huán)比較P&O法
        電測與儀表(2014年2期)2014-04-04 09:04:00
        基于Raspberry PI為結(jié)點的天氣云測量網(wǎng)絡(luò)實現(xiàn)
        一種新穎的光伏自適應(yīng)變步長最大功率點跟蹤算法
        神奇的鹽
        勇捅蜂巢
        A午夜精品福利在线| 后入内射国产一区二区| 国产一精品一av一免费| 成年女人毛片免费视频| 99精品视频69v精品视频免费| 国产视频一区二区三区久久亚洲| 人妻av一区二区三区高| 男的和女的打扑克的视频| 午夜免费观看日韩一级视频| 色avav色av爱avav亚洲色拍| 欧美日韩国产免费一区二区三区欧美日韩| 日韩久久久黄色一级av| 国产免费精品一品二区三| 国产亚州精品女人久久久久久| 无码国产午夜福利片在线观看| 成人片在线看无码不卡| 国产另类人妖在线观看| 日本va欧美va精品发布| 婷婷五月六月综合缴情| 国产97色在线 | 免| 一区二区在线观看视频亚洲| 久久精品丝袜高跟鞋| 欧美孕妇xxxx做受欧美88| 免费无遮挡毛片中文字幕| 国产成人av三级在线观看韩国| 亚洲国产av无码精品无广告| 人妻丰满熟妇av无码区| 午夜国产在线| 美女极度色诱视频国产免费| 日本va中文字幕亚洲久伊人| 人妻 日韩 欧美 综合 制服| 国产美女白浆| 亚洲av第二区国产精品| 手机av在线中文字幕| 黄网站欧美内射| 久久国产影视免费精品| 亚洲一区二区蜜桃视频| 性色av免费网站| 国产精品九九九久久九九| 一级做a爱视频在线播放| 日本道免费一区二区三区日韩精品 |