插入排序

 

插入排序主要思想是:把要排序的數字插入到已經排好的數據中。(我自己理
解的哈)。例如12356是已經排好的序,我們將4插入到他們中,時插入之後也是排好序的。這裏顯而易見
是插入到3的後面。變爲123456.
實現思路:插入排序就是先是一個有序的數據,然後把要插入的數據插到指定的位置,而排序首先給的就
是無序的,我們怎麼確定先得到一個有序的數據呢?答案就是:如果只有一個,當然是有序的咯。我們先
拿一個出來,他是有序的,然後把數據一個一個插入到其中,那麼插入之後是有序的,所以直到最後都是
有序的。。哈哈。結果就出來了!
當然在寫的時候還是有一個技巧的,不需要開額外的數組,下標從第二個元素開始遍歷知道最後一個,
後插入到前面已經有序的數據中。這樣就不會浪費空間了。
插入排序用處還是很多的,特別是鏈表中,因
爲鏈表是指針存放的,沒有數組那麼好準確的用下標表示,插入是簡單有效的方法。嘻嘻。。廢話少說,
源代碼奉上:


例 11.1. 插入排序

#include <stdio.h>

#define LEN 5
int a[LEN] = { 10, 5, 2, 4, 7 };

void insertion_sort(void)
{
	int i, j, key;
	for (j = 1; j < LEN; j++) {
		printf("%d, %d, %d, %d, %d\n",
		       a[0], a[1], a[2], a[3], a[4]);
		key = a[j];
		i = j - 1;
		while (i >= 0 && a[i] > key) {
			a[i+1] = a[i];
			i--;
		}
		a[i+1] = key;
	}
	printf("%d, %d, %d, %d, %d\n",
	       a[0], a[1], a[2], a[3], a[4]);
}

int main(void)
{
	insertion_sort();
	return 0;
}

爲了更清楚地觀察排序過程,我們在每次循環開頭插了打印語句,在排序結束後也插了打印語句。程序運行結果是:

10, 5, 2, 4, 7
5, 10, 2, 4, 7
2, 5, 10, 4, 7
2, 4, 5, 10, 7
2, 4, 5, 7, 10
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章