1. 程式人生 > >【資料結構】選擇排序

【資料結構】選擇排序

  • 概念:

每次從待排序的陣列元素中,選出最小或最大的,存放在序列的起始位置,直到全部待排序的陣列元素排完。

  • 核心思想:

如果有n個元素需要排序,首先從n個元素中找到最小的那個元素,並與第0個位置上的元素交換,最大的那個元素與最後一個位置上的數交換(說明一點,如果沒有比第0位置上的元素小的就不用交換了,大的也一樣);然後再從剩下的n-1個元素中找到最小的元素與第1個位置上的元素交換,找到最大的元素與倒數第二個位置上的數交換;之後依次類推,直到所有元素都排序好。

  • 具體程式碼如下:
void SelectSort(int* a, int n)//選擇排序
{
	assert(a);
	int begin = 0;
	int end = n - 1;
	int max = 0;
	int min = 0;
	int i = 0;
	while (begin < end)
	{
		min = begin;
		max = begin;
	for (i = begin; i <= end; i++)
	{
	    if (a[i] >=a[max])
	   {
	      max = i;
	   }
	   if (a[i] <= a[min])
	   {
	     min = i;
	   }
    }
	if (a[begin] != a[min])
	{
		Swap(&a[begin], &a[min]);
	}
	if (a[begin] == a[max])
	{
	max = min;
	}
	Swap(&a[end], &a[max]);
	begin++;
	end--;
	}
}
  • 總結:

1.直接選擇排序好理解,但是效率不是很好。實際中很少使用

2.時間複雜度: O(N^2)

3.空間複雜度: O(1)

4.穩定性:不穩定(可以調整為穩定的)