Vol5
排序:笔试和面试的重点.1.算法描述;2.实现;3.效率分析(时间复杂度,空间复杂度,稳定性)
稳定性:针对关键字相同的数据,排序前如果A在A"的前面,排序后还能保证A在A"的前面,则算法稳定,否则不稳定
稳定性判断依据:有没有跳跃的交换数据,没有则稳定
5.选择排序
代码思想:每次从待排序中找到最小值和待排序的第一个交换
时间复杂度:O(n^2)
空间复杂度:O(1)
稳定性:不稳定 //例如(3,3,1,…)
//选择法排序
void SelectSort(int *arr,int len)//O(n^2),O(1),不稳定(3,3,1,...)
{
int minlndex;//最小值的下标
int tmp;
for(int i=0;i<len-1;i++)
{
minlndex=i;
for(int j=i+1;j<len;j++)//找最小值
{
if(arr[minlndex]>arr[j])
{
minlndex=j;
}
}
if(minlndex!=i)//判断一下,减少不必要的交换
{
tmp=arr[minlndex];
arr[minlndex]=arr[i];
arr[i]=tmp;
}
}
}