void Swap(int A[], int i, int j)
{
int temp = A[i];
A[i] = A[j];
A[j] = temp;
}
void BubbleSort(int A[], int n)
{
int i,j;
for ( j = 0; j < n - 1; j++) // 每次最大元素就像气泡一样"浮"到数组的最后
{
for ( i = 0; i < n - 1 - j; i++) // 依次比较相邻的两个元素,使较大的那个向后移
{
if (A[i] > A[i + 1]) // 如果条件改成A[i] >= A[i + 1],则变为不稳定的排序算法
{
Swap(A, i, i + 1);
}
}
}
}
int main()
{
int A[] = { 6, 5, 3, 1, 8, 7, 2, 4 }; // 从小到大冒泡排序
int n = sizeof(A) / sizeof(int);
BubbleSort(A, n);
printf("冒泡排序结果:");
int i;
for ( i = 0; i < n; i++)
{
printf("%d ", A[i]);
}
printf("\n");
return 0;
}
/*
有很多问题:
可以参考我用C写的一个冒泡排序:
int main()
{
int n;
printf("输入数组元素个数:\n");
scanf("%d", &n);
if (n <= 0) {
printf("invalid input array number: %d\n", n);
exit(1);
}
int *a = (int *)malloc(sizeof(int) * n);
if (!a) {
printf("memory is not enough\n");
exit(1);
}
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
for (int i = 0; i < n - 1; i++) { // n-1趟排序,每一趟移动最大元素值到数组末尾,不再参与下一趟的比较
for (int j = 1; j < n - i; j++) { // j范围: 1..n-i-1, j-1范围: 0..n-i-2;
// 极端情况:1) i = 0; 2)i = n - 2, 再看j和j-1是否能取到边界
if (a[j - 1] > a[j]) { // swap a[j-1], a[j]
int temp = a[j - 1];
a[j - 1] = a[j];
a[j] = temp;
}
}
}
free(a);
return 0;
}