【数据结构】选择排序

  • 概念:

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

  • 核心思想:

如果有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.稳定性:不稳定(可以调整为稳定的)

猜你喜欢

转载自blog.csdn.net/qq_42270373/article/details/83819748