【数据结构】简单选择排序以及时间复杂度的分析

简单选择排序

简单选择排序法就是通过n-i次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录交换。如图所示:

完整代码

#include <stdio.h>
void SimpleSelectSort(int arr[],int len)
{
	int i = 0;
	int min;//记录最小值的下标
	int temp;
	for(i;i < len-1;i++)
	{
		min = i;
		for(int j = i + 1;j < len;j++)
		{
			if(arr[min] > arr[j])
			{
				min = j;
			}
		}
		if(min != i)
		{
			temp = arr[i];
			arr[i] = arr[min];
			arr[min] = temp;
		}
	}
}
void Show(int arr[],int len)
{
	for(int i = 0;i < len;i++)
	{
		printf("%d ",arr[i]);
	}
}
int main()
{
	int arr[] = {95,8,409,8,93};
	int len = sizeof(arr)/sizeof(arr[0]);
	SimpleSelectSort(arr,len);
	Show(arr,len);
}

 

时间复杂度分析: 

首先,简单选择排序是一个稳定的排序算法;它最大的特点就是交换移动数据次数相当少,这样也就节约了相应的时间。分析它的时间复杂度发现,无论最好最差的情况,其比较次数都是一样的多,第i趟排序需要进行n-i次关键字的比较,此时需要比较

而对于交换次数而言,当最好的时候,交换为0次,最差的时候,也就初始化降序,需要交换n-1次,基于最终的排序时间是比较与交换的次数总和,因此,总的时间复杂度依然为O(n²)

猜你喜欢

转载自blog.csdn.net/QX_a11/article/details/89413987