電腦時常被使用來把資料依序排列。舉例來說,把名字依字母順序排列、依日期排序電子郵件或行程,或是依數量多寡排列物品等等。排序除了可使得我們在找東西時更快速之外,還有許多顯著的好處。例如把全班的成績依高低排序,最低分與最高分就很明顯了。
1. 什麼樣的資料會需要排序?
2. 為什麼排序很重要?
3. 如果資料沒有排序會怎麼樣?
http://163.22.72.196/html5/html5_sort_scale/sort_scale.html
http://163.22.72.1/html5/html5_sort_scale/sort_scale.html
按下「開始」之後,利用畫面中央的天平,將畫面上八個瓶子按照大小順序排列,排列後按下「完成」,並檢查你的答案是否正確。
對於順序的排列,如果有更好的方法,可以有效地減少完成所需的時間,以下介紹幾種不同的排序演算法,在每學會一種演算法之後,重新操作一次程式進行瓶子重量的排列
先找到最輕的容器並擺在一邊。接下來,再從剩下的容器中挑出最輕的,並也擺到一邊。重復此動作直到所有的容器都被擺到同一邊。
從尚未排序的物件群中挑出一個物件,把它插入已排序物件群中正確的位置。隨著一次次的動作,未排序物件群的規模會越來越小,而已排序物件群的規模則會越來越大,直到所有物件都排序完成。玩撲克牌時就常常利用這種方式來理牌。
一次又一次從頭到尾檢查整個物件群,如果兩個相鄰的物件順序不對,就把它們交換,整個物件群檢查完之後,再重頭開始檢查一次。如果沒有任何物件在檢查名單時被交換,就表示排序完成了。這個方法並不是很有效率,但是對某些人來說這種方法較容易理解。
首先,將名單隨機分成大小相同的兩個群組(奇數個時則分成大小相近的兩份)。兩個群組都要分別做排序,最後再將兩個群組合併。
合併兩個群組的方法:比較兩個群組最前面的物件,把較小的那個挑出來放入排序群組中。在下圖中,兩組的最前面物件分別是100和150,所以下一個就把100的物件挑出來放入已排序群組中。
提示:最開始分成兩個群組以後,同樣用合併排序法處理。
從全部的物件中隨機挑出一個物件,然後把它放在天平的一端。
然後將它與其他剩餘的物件一一比較,將較輕的放在左側,隨機選出的物件放在中間,較重的則分放在右側。(有可能在結束比較時,兩邊物件的數量不一樣)
選擇其中一側,將該側所有物件重複上面的步驟。再將另一側的物件也做一樣的處理。(記得記住一開始選擇的物件要保持在中間)
剩餘的物件群一直重複這些步驟,直到每一群都只剩一個物件。一旦所有物件群都被分到只剩一個物件,所有物件便會被分成由最輕到最重。
是在函式中呼叫自身同名函式
Bubble sort, Quick sort
將問題分成與原問題形式相同的子問題,遞迴將子問題解決後再合併得到原問題的解,這種演算法設計策略叫做分治法。
Merge sort, Quick sort
Bubble sort, Selection sort
所有排序法都會使用