簡單選擇排序

選擇排序的基本思想:

每一趟在數個記錄裏選取關鍵字最小的記錄作爲有序序列的第i個記錄。實現代碼如下:

void SelectSort(int a[], int n)
{
	int k, temp;
	for (int i =0 ; i < n - 1; ++i)
	{
		k = i;
		for (int j = i + 1; j < n; ++j)
		{
			if (a[k] > a[j])
			{
				k = j;
			}
		}
		if (k != i)
		{
			temp = a[i];
			a[i] = a[k];
			a[k] = temp;
		}
	}
}

從簡單排序的實現過程來看,與冒泡算法相比,最大的特點就是移動數據次數相當少。

時間複雜度:

無論是最差還是最好的情況,選擇排序比較的次數都一樣多,第i趟需要比較n-i次,總共需要比較n-1+n-2+...+1 = n(n-1)/2次。最好的情況時交換的次數爲0,最差的時候,交換的次數爲n-1次,基於最終的交換次數和比較次數,因此總的時間複雜度爲O(n^2)。儘管與冒泡排序同樣的時間複雜度,但是簡單選擇排序的性能還是略優於冒泡排序。

穩定性:

選擇排序在每一趟中選擇最小的數據與第一個位置的數據交換,以此類推,直到n-1個元素,如果在某一趟中,若有一個元素比當前元素小,而此時在該元素的前面又有一個和當前元素相等的元素,交換完成後,序列的穩定性就被破壞了。比如,有序列5,4,5,3,6在第一趟結束後,第一個位置的5會和3交換,那麼原序列中的兩個5的相對前後順序就被破壞了,因此簡單選擇排序是一個不穩定的排序算法。

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