排序(2) - 選擇排序 (圖文演示)

所有的排序都以升序爲例。考慮複雜度,考慮穩定性的情況。以及在原基礎上步步優化。


在上篇排序(1)的博客裏有提到過穩定性的問題。但是沒有做出解釋。在這邊解釋一下穩定性的問題。
排序前:5,1,3a,,4,7,3b
穩定的排序:1,3a,3b,4,5,7
不穩定的排序:1,3b,3a,4,5,7

在自定義的對象進行排序的時,穩定性會影響最終的排序效果。


加粗樣式
選擇排序:
算法:
**1.在序列中找出最大的那個元素,然後與末尾的元素進行交換。(執行完一輪後,最末尾的那個元素就是最大元素);
**2.忽略1中曾經找到的那個最大元素,重複執行步驟1.
在這裏插入圖片描述

選擇排序:

void SelectSort::sort(int array[], int len)
{
	if (array == NULL || len == 1)
	{
		return;
	}

	this->m_array = array;
	this->m_len = len;

	for (int end = this->m_len - 1; end > 0; end--)
	{
		//每次假設數組的首元素爲數組序列的最大值
		int maxIndex = 0;
		for (int begin = 1; begin <= end; begin++)
		{
			//如果序列中有maxIndex大的元素,maxIndex變化
			if(this->cmp(maxIndex,begin) <= 0)
			{
				maxIndex = begin;
			}
		}
		//最大的元素與數組最後一個元素交換,end隨之在for裏面--
		this->swap(maxIndex, end);
	}

	for (int i = 0; i < this->m_len; i++)
	{
		cout << this->m_array[i] << "_";
	}
}

選擇排序的優化:
其實堆排序就是對選擇排序的優化,在後面的博客中會詳細介紹堆排序。


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