經典排序演算法

2021-07-11 19:57:28 字數 2408 閱讀 3995

1、氣泡排序 bubble sort

最簡單的排序方法是氣泡排序方法。這種方法的基本思想是,將待排序的元素看作是豎著排列的「氣泡」,較小的元素比較輕,從而要往上浮。在氣泡排序演算法中我們要對這個「氣泡」序列處理若干遍。所謂一遍處理,就是自底向上檢查一遍這個序列,並時刻注意兩個相鄰的元素的順序是否正確。如果發現兩個相鄰元素的順序不對,即「輕」的元素在下面,就交換它們的位置。顯然,處理一遍之後,「最輕」的元素就浮到了最高位置;處理二遍之後,「次輕」的元素就浮到了次高位置。在作第二遍處理時,由於最高位置上的元素已是「最輕」元素,所以不必檢查。一般地,第i遍處理時,不必檢查第i高位置以上的元素,因為經過前面i-1遍的處理,它們已正確地排好序。這個演算法可實現如下。

演算法如下:

/***氣泡排序

*@paramsrc待排序陣列 */

voiddobubblesort(intsrc)

}printresult(i,src);

}      }

2、選擇排序 selection sort

選擇排序的基本思想是:對待排序的記錄序列進行n-1遍的處理,第1遍處理是將l[1..n]中最小者與l[1]交換位置,第2遍處理是將l[2..n]中最小者與l[2]交換位置,......,第i遍處理是將l[i..n]中最小者與l[i]交換位置。這樣,經過i遍處理之後,前i個記錄的位置就已經按從小到大的順序排列好了。

當然,實際操作時,也可以根據需要,通過從待排序的記錄中選擇最大者與其首記錄交換位置,按從大到小的順序進行排序處理。

演算法如下:

/***選擇排序

*@paramsrc待排序的陣列 */

voiddochoosesort(intsrc)

} src[samllestlocation]=src[i];

src[i]=temp;

printresult(i,src); }

}3、插入排序 insertion sort

插入排序的基本思想是,經過i-1遍處理後,l[1..i-1]己排好序。第i遍處理僅將l[i]插入l[1..i-1]的適當位置,使得l[1..i]又是排好序的序列。要達到這個目的,我們可以用順序比較的方法。首先比較l[i]和l[i-1],如果l[i-1]≤ l[i]騆[1..i]已排好序,第i遍處理就結束了;否則交換l[i]與l[i-1]的位置,繼續比較l[i-1]和l[i-2],直到找到某乙個位置j(1≤j≤i-1),使得l[j] ≤l[j+1]時為止。

簡言之,插入排序就是每一步都將乙個待排資料按其大小插入到已經排序的資料中的適當位置,直到全部插入完畢。插入排序方法分直接插入排序和折半插入排序兩種,這裡只介紹直接插入排序,折半插入排序留到「查詢」內容中進行。

圖1演示了對4個元素進行直接插入排序的過程,共需要(a),(b),(c)三次插入。

圖1 對4個元素進行插入排序

在下面的插入排序演算法中,為了寫程式方便我們可以引入乙個哨兵元素l[0],它小於l[1..n]中任一記錄。所以,我們設元素的型別elementtype中有乙個常量-∞,它比可能出現的任何記錄都小。如果常量-∞不好事先確定,就必須在決定l[i]是否向前移動之前檢查當前位置是否為1,若當前位置已經為1時就應結束第i遍的處理。另乙個辦法是在第i遍處理開始時,就將l[i]放入l[0]中,這樣也可以保證在適當的時候結束第i遍處理。下面的演算法中將對當前位置進行判斷。

演算法如下:

/***插入排序(while迴圈實現)

*@paramsrc待排序陣列 */

voiddoinsertsort1(intsrc)

src[j]=temp;

printresult(i+1,src); }

}/**

*插入排序(for迴圈實現)

*@paramsrc待排序陣列 */

voiddoinsertsort2(intsrc)

else//如果當前的數,不小前面的數,那就說明不小於前面所有的數,

//因為前面已經是排好了序的,所以直接通出當前一輪的比較

break; }

src[j]=temp;

printresult(i,src); }

}

經典排序演算法

排序分為內部排序和外部排序,內部排序是指待排序的資料都是在記憶體中的,例如陣列 外部排序指待排序資源在記憶體外,例如對檔案的排序。此篇說的是內部排序。通俗地來說,內部排序就是將一堆資料按一定規則對它進行排序。排序又分為穩定排序和不穩定的排序,如果初始序列ai,ak有序 ai ak 排序後變成了ak,...

經典排序演算法

思想 相鄰元素兩兩比較大的往下沉,小的往上浮.具體點說就是兩相鄰元素相互比較,如果前面的元素比後面的大就換位置,否則繼續比較.舉個例子吧 將陣列arr 排序 廢話了那麼多,接下來是應該有 的對吧public static void bulletsort int arr 原理 用乙個索引位置上的元素,...

經典排序演算法

1簡單插入排序 void insert sort elementtype a,int n a i tmp 新牌位置 最好情況 t o n 最壞情況 t o n2 2希爾排序 希爾排序又稱 縮小增量排序 定義增量序列dm dm 1 d1 1void shellsort elementtype a,in...