1. 程式人生 > 實用技巧 >插入排序演算法

插入排序演算法

插入排序

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天更一次博