內部排序算法之選擇排序

個人覺得選擇排序算法是最容易理解的排序算法,我們在日常生活中經常用這種方法排序。

每次從待排序的系列中選出最小的元素後,待排序的元素數目減少1,直到待排序系列中的元素個數爲1,最後這個元素就是最大的元素, 排序完成。

選出待排序系列中最小元素的時候,需要遍歷待排序系列中所有的元素, 發現逆序, 則交換。 爲了減少交換次數,並且, 最終只需要和當前最小的元素交換,則 只需要記錄當前最小元素的索引,作一次交換。

int SelectSort(int *p, int n)
{
	if(NULL == p || n <= 0)
		return 0;
	int i, j, k;
	for(i=0; i<n; ++i)
	{
		k = i;
		for(j=i+1; j<n; ++j)
		{
			if(p[j] < p[k])
				k = j;
		}
		if(k != i)
		{
			swap(p+i, p+k);
		}
	}
	return 1;
}

需要體會簡單插入排序, 冒泡排序, 選擇排序這3個排序算法的過程, 這樣循環條件纔不會寫錯。這3個排序算法的時間效率都是O(N^2),在數據較少(10^3以下)的時候, 通常插入排序效率最高。

需要注意的是選擇排序不是穩定排序, 例如 [3, 8, 3, 1]系列在第一次排序的時候,第1個數字將和第4個數字交換.

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