數(shù)據(jù)排序程序設(shè)計(jì)
數(shù)據(jù)排序就是將一批數(shù)由小到大(升序)排列,或由大到小(降序)排列。下面介紹無(wú)符號(hào)數(shù)據(jù)升序排序程序設(shè)計(jì)。
最常用的數(shù)據(jù)排序算法是冒泡法。冒泡法是相鄰數(shù)互換的排序方法,因其過(guò)程類似水中氣泡上浮,故稱冒泡法。排序時(shí),從前向后進(jìn)行相鄰兩個(gè)數(shù)的比較,如果數(shù)據(jù)的大小次序與要求的順序不符時(shí),就將兩個(gè)數(shù)互換;否則,順序符合要求就不互換。如果進(jìn)行升序排序,應(yīng)通過(guò)這種相鄰數(shù)互換方法,使小數(shù)向前移,大數(shù)向后移。如此從前向后進(jìn)行一次次相鄰數(shù)互換(冒泡),就會(huì)把這批數(shù)據(jù)的最大數(shù)排到最后,次大數(shù)排在倒數(shù)第二的位置,從而實(shí)現(xiàn)一批數(shù)據(jù)由小到大的排列。
假設(shè)有7個(gè)原始數(shù)據(jù)的排列順序?yàn)?、4、1、2、5、7、3。第一次冒泡的過(guò)程是:
如此進(jìn)行,各次冒泡的結(jié)果如下:
由上面的冒泡法可以看出,對(duì)于,n個(gè)數(shù),理論上應(yīng)進(jìn)行(n-l)次冒泡才能完成排序,但實(shí)際上有時(shí)不到(n-1)次就已完成排序。例如,上面的7個(gè)數(shù),應(yīng)進(jìn)行6次冒泡,但實(shí)際上第4次冒泡時(shí)就已經(jīng)完成了排序。如何判定排序是否已經(jīng)完成呢?就是看各次冒泡中是否有互換發(fā)生,如果有數(shù)據(jù)互換,則排序還沒(méi)完成;否則就表示已經(jīng)排好序。在程序設(shè)計(jì)中,常用設(shè)置互換標(biāo)志的方法,用該標(biāo)志的狀態(tài)表示在一次冒泡中是否有互換進(jìn)行。下面介紹具體的冒泡法排序過(guò)程。
一批單字節(jié)無(wú)符號(hào)數(shù),以RO為首地址指針,R2中為字節(jié)數(shù),將這批數(shù)進(jìn)行升序排列。程序框圖如圖4-2所示。程序如下: