排序Vol3
排序:笔试和面试的重点.1.算法描述;2.实现;3.效率分析(时间复杂度,空间复杂度,稳定性)
稳定性:针对关键字相同的数据,排序前如果A在A"的前面,排序后还能保证A在A"的前面,则算法稳定,否则不稳定
稳定性判断依据:有没有跳跃的交换数据,没有则稳定
3.冒泡排序
代码思想:两两比较,大的往后,从当前数字开始,两两比较往后找,目的是把大的交换到后面
时间复杂度:O(n^2)
空间复杂度:O(1)
稳定性:稳定
//冒泡排序,两两比较,大的往后
void BubbleSort(int *arr,int len)//O(n^2),O(1),稳定
{
int tmp;
for(int i=0;i<len-1;i++)//趟数
{
for(int j=0;j+1<len-i;j++)//j为排序的值;注意j+1越界
{
if(arr[j]>arr[j+1])//交换
{
tmp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=tmp;
}
}
}
}