插入排序法 (Insert Sort) 是將陣列中的元素, 逐一與已排序好的資料做比較, 再將該陣列元素插入適當的位置.
範例說明 :
現有一資料群 : 6 4 9 8 3 下面將使用插入排序法由小到大排序 :
步驟1 : 將資料群第一個元素6 加入已排序資料群
6 4 9 8 3
步驟2 : 將第二個元素4 與已排序資料群比較 : 因為4沒有比已排序資料群任何一個元素大, 故將4放在第一個元素, 所以已排序資料依序往後移動. 所以已排序資料群為 4 6.
4 6 9 8 3
步驟3 : 將第三個元素9 與已排序資料群比較 : 因為已排序資料群沒有比9 大, 所以9保留原來位置, 所以已排序資料群為 4 6 9.
4 6 9 8 3
步驟4 : 將第四個元素8 與已排序資料群比較 : 因為8 比9 小, 故將8 放在9 位置, 9 則往後移動, 所以已排序資料群為 4 6 8 9.
4 6 9 8 3
步驟5 : 將第五個元素3 與已排序資料群比較 : 因為3沒有比已排序資料群任何一個元素大, 故將3放在第一個元素, 所有已排序資料依序往後移動, 所以已排序資料群為 3 4 6 8 9. -> 完成排序.
插入法分析 :
範例代碼 :
- #include
- using namespace std;
- struct BenchMark {
- int swapTime; // Swap Time
- int verifyTime; // Verify Time
- };
- BenchMark insertSort(int data[], int n) {
- int cnt=0, vt=0, tmp, j;
- BenchMark bm;
- for(int i=1; i
- vt++;
- j = i-1;
- while(j>=0 && data[j+1]< data[j]) {
- cnt++;
- vt++;
- tmp = data[j+1];
- data[j+1] = data[j];
- data[j] = tmp;
- j--;
- }
- }
- bm.swapTime = cnt;
- bm.verifyTime = vt;
- return bm;
- }
- void main(bool b) {
- if(b) {
- int data[7] = {2,5,9,7,6,8,1};
- cout<< "原始資料: " << endl;
- for(int i=0; i<7; i++) {
- printf("%2d ",data[i]);
- }
- printf("\n");
- BenchMark bm = insertSort(data, 7);
- cout << "插入排序: " << endl;
- for(int i=0; i<7; i++) {
- printf("%2d ",data[i]);
- }
- printf("\n");
- printf("Swap time: %d\n", bm.swapTime);
- printf("Verify time: %d\n", bm.verifyTime);
- }
- }
沒有留言:
張貼留言