插入排序算法

插入排序

618買了本算法導論,考完試10號,旅遊完回來15號,又出去聚會了兩天,終於開始學習了= =
第一個算法就是這個插入排序,道理很簡單,後一個數和前一個數比較大小,交換順序,最終按大小排好順序。下面放一張原理圖:
插入排序模擬圖
上圖中還給出了僞代碼,而後我稍做修改,用c寫出了這個程序:算法

#include<stdio.h>
void InsertionSort(int []);
int main()
{
	int a[5], i;
	for(i = 0; i < 5; i++)
	{
		scanf("%d", &a[i]);
	}
	InsertionSort(a);
	for(i = 0; i < 5; i++)
	{
		printf("%d ", a[i]);
	}
	printf("\n");
	return 0;
}

void InsertionSort(int num[])
{
	int j, k, key;
	for(j = 1; j < 5; j++)
	{
		key = num[j];
		k = j - 1;
		while(k >= 0 && num[k] > key)
		{
			num[k + 1] = num[k];
			k = k - 1;
		}
		num[k + 1] = key;
	}
}

測試結果以下:
插入排序測試結果
在代碼的第26行,把 num[k] > key 改爲 num[k] < key 就能實現降序排序。
再說一下循環不變式,它的三個性質:初始化、保持、終止,能夠幫助判斷算法的正確與否。
循環不變式三性質
保持這一性質是判斷算法是否正確很關鍵一點,要保證每次迭代時 A[j] 以前的數已經排好序。
這個插入排序仍是挺簡單的,容易理解並且代碼量少,後面就要學分析算法,看的一臉懵逼。這本書估計大四都學不完了orz
爭取3天更一次博學習

相關文章
相關標籤/搜索