1.冒泡排序
两两比较,大的向后挪动
时间复杂度O(n^2) 空间复杂度O(1)
稳定性:稳定
优缺点:
缺点:时间复杂度大
优点:实现简单 稳定
void BubbleSort(int *arr, int len)
{
assert(arr!=NULL);
for(int i=0; i<len-1; i++)//控制轮数
{
for(int j=0; j<len-1-i; j++)//控制每一轮比较的次数
{
if(arr[j] > arr[j+1])
{
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
}
2.选择排序
每一轮找到待排序序列的最小值和待排序序列的第一个值进行交换
时间复杂度O(n^2) 空间复杂度O(1)
稳定性:不稳定
void SelectSort(int *arr, int len)
{
assert(arr!=NULL);
int minindex;//保存最小值的下标,而不是最小值本身
for(int i=0; i<len-1; i++)//控制层数
{
minindex = i;
for(int j=i+1; j<len; j++)//找到这一轮待排序序列的最小值的下标
{
if(arr[j] < arr[minindex])
{
minindex = j;
}
}
//第二层for循环执行结束 可以确定待排序序列中最小值的下标 保存在 minindex里
//arr[minindex] arr[i]
if(minindex != i) //
{
int tmp = arr[minindex];
arr[minindex] = arr[i];
arr[i] = tmp;
}
}
}
void Swap1(int *a, int *b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
void Swap2(int *a, int *b)
{
*a = *a + *b;
*b = *a - *b;
*a = *a - *b;
}
void Swap3(int *a, int *b)
{
*a = *a ^ *b;
*b = *a ^ *b;
*a = *a ^ *b;
}
void Reverse(int *arr, int len)
{
int i=0;
int j=len-1;
while(i<=j)
{
Swap1(&arr[i], &arr[j]);
i++;
j--;
}
}