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