#include<string.h>
#include<stdio.h>
#include<stdlib.h>
void printArray(int array[], int len)
{
int i = 0;
for (i = 0; i<len; i++)
{
printf("%d ", array[i]);
}
printf("\n");
}
/*void swap1(int *a,int *b)
{
int temp=0;
temp = *a;
*a = *b;
*b = temp;
}*/
void swap(int array[], int i, int j)
{
//int temp = array[i];
//array[i] = array[j];
//array[j] = temp;
//使用异或的方法交换
array[i] = array[i] ^ array[j];
array[j] = array[i] ^ array[j];
array[i] = array[i] ^ array[j];
}
void BubbleSort(int array[], int len)
{
int i = 0;
int j = 0;
for (i = 0; i<len; i++)
{
for (j = len - 1; j>i; j--)
{
if (array[j - 1]>array[j])
{
swap(array, j - 1, j);
}
}
}
}
void BubbleSort1(int array[], int len)
{
int i = 0;
int j = 0; int enchange = 1;//enchange=1表明没有排好序
for (i = 0; i<len&&enchange; i++)
{
enchange = 0;
for (j = len - 1; j>i; j--)
{
if (array[j - 1]>array[j])
{
swap(array, j - 1, j);
enchange = 1;
}
}
}
}
/*
空间复杂度:
申请的额外空间有i j,是有限个额外空间,所以空间复杂度是O(1)
如果申请额外空间是本身数组的长度,那么空间复杂度就是O(N)
时间复杂度:
相邻两个数以此进行比较,谁大谁放到后面,第一次遍历,访问N次,比较N-1次,交换N-1次,取出最大的放在最后一个位置;
第二次比较,访问N-1次,比较N-2次,交换N-2次,取出次大的放在倒数第二个位置,以此类推,最终还是aN² + bN + c的形式,
所以冒泡排序和选择排序的时间复杂度一样也是O(N²)
*/
void bubble_sort(int array[], int len)
{
int i = 0, j = 0;
for (i = len-1; i > 0; i--)
{
for (j = 0; j < i; j++)
{
if(array[j] > array[j+1])
swap(array, j, j+1);
}
}
}
int main()
{
int array[] = { 12,0 ,3 ,46, 2 };
int len = sizeof(array) / sizeof(*array);
printArray(array, len);
bubble_sort(array, len);
printArray(array, len);
system("pause");
return 0;
}
C语言实现冒泡排序
最新推荐文章于 2022-04-07 15:30:37 发布