概念
冒泡排序(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;
}