// 通过指针交换两个元素的值
void swap(int *a, int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
/****************************************************************
* name;BubbleSort
* function:sort
* parameter;
* @int arr[]
* @int arrsize
*
* ReValue;none
* author;小北blog
* attention;none
* date;2024.06.01
* history;
* version;
* Copyright(c) 2024 [email protected] All rights reserved
*****************************************************************/
void BubbleSort(int arr[], int arrsize)
{
int i, j, temp = 0;
for (i = 1; i < arrsize; i++) // 比较arrsize-1轮
{
for (j = 0; j < arrsize - i; j++) // 每轮交换arrsize - i次
{
if (arr[j] > arr[j + 1]) // 判断大小
{
swap(&arr[j], &arr[j + 1]);
}
}
}
}
// 打印数组
void printArray(int arr[], int size)
{
for (int i = 0; i < size; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
// 主函数
int main()
{
int arr[] = {77, 66, 44, 11, 99, 55};
int n = sizeof(arr) / sizeof(arr[0]);
printf("原来的数组: \n");
printArray(arr, n);
BubbleSort(arr, n);
printf("排序后的数组: \n");
printArray(arr, n);
return 0;
}
运行结果:
总结: 冒泡排序的中心思想就是循环交换,框架是两个for循环,比较从左往右,第一个for循环次数是数组大小减一,减一因为第一个数不用和自己比较,然后第二个for是依次向后比较,直到第一个for循环第二次。
该时间间复杂度是O(n*n)。