概念
冒泡排序(Bubble Sort)是一种简单的排序算法,它重复地遍历要排序的列表,一次比较两个元素,并且如果它们的顺序错误就把它们交换过来。通过多次的遍历和比较,最大(或最小)的元素会逐渐“浮”到数列的顶端,因此得名“冒泡排序”。
代码
方法一:数组
#include<stdio.h>
void Print(int arr[], int size)
{
for (int i = 0; i < size; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
}
void Sort(int* p1, int* p2)
{
*p1 = *p1 ^ *p2;
*p2 = *p1 ^ *p2;
*p1 = *p1 ^ *p2;
}
void BubbleSort(int arr[],int size)
{
int flag = 1;
for (int i = 0; i < size - 1; i++)
{
for (int j = 0; j < size - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
Sort(&arr[j], &arr[j + 1]);
flag = 0;
}
}
if (flag)
{
break;
}
}
}
int main()
{
int arr[] = { 34,64,82,41,25 };
Print(arr, 5);
BubbleSort(arr, 5);
Print(arr, 5);
return 0;
}
方法二:指针
#include<stdio.h>
void printf(int* p, int sz)
{
for (int i = 0; i < sz; i++)
{
printf("%d ", *p++);
}
printf("\n");
}
void BubbleSort(int* p, int sz)
{
int flag = 1;
for (int i = 0; i < sz-1; i++)
{
for (int j = 0; j < sz - 1 - i; j++)
{
if (*(p + j) > *(p + j + 1))
{
*(p + j) = *(p + j) ^ *(p + j + 1);
*(p + j + 1) = *(p + j) ^ *(p + j + 1);
*(p + j) = *(p + j) ^ *(p + j + 1);
flag = 0;
}
}
if (flag)
{
break;
}
}
}
int main()
{
int arr[] = { 23,64,3,7,34,25 };
int sz = sizeof(arr) / sizeof(arr[0]);
printf(arr, sz);
BubbleSort(arr, sz);
printf(arr, sz);
return 0;
}