冒泡排序就是前一个与后一个比较,若前一个大于后一个则进行交换,排序一轮将最大的数换到最后,直到所有数字按顺序进行排列
例如:对5, 3, 2, 4, 1进行冒泡排序,升序
第一轮:
3, 5, 2, 4, 1(5、3比较)
3, 2, 5, 4, 1(5、2比较)
3, 2, 4, 5, 1(5、4比较)
3, 2, 4, 1, 5(5、1比较)
第一轮结束将最大的数5换到了最后一位
第二轮:
2, 3, 4, 1, 5(3、2比较)
2, 3, 4, 1, 5(3、4比较)
2, 3, 1, 4, 5(4、1比较)
2, 3, 1, 4, 5(4、5比较)
第二轮结束将第二大数4换到了倒数第二位
第三轮:
2, 3, 1, 4, 5(2、3比较)
2, 1, 3, 4, 5(3、1比较)
2, 1, 3, 4, 5(3、4比较)
2, 1, 3, 4, 5(4、5比较)
第三轮结束将第三大数3换到了倒数第三位
第四轮:
1, 2, 3, 4, 5(2、1比较)
1, 2, 3, 4, 5(2、3比较)
1, 2, 3, 4, 5(3、4比较)
1, 2, 3, 4, 5(4、5比较)
第四轮结束将第四大数2换到了倒数第四位
代码实现
#include <stdio.h>
void BubbleSort(int arr[], int num)
{
int i = 0;
int j = 0;
int A = 0;
for (i = 0; i < num - 1; i++) //要进行num-1轮冒泡排序
{
for (j = 0; j < num - 1; j++) //每一轮进行num-1次排序
{
if (arr[j]>arr[j + 1]) //左右两个数进行比较
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
A = 1; //若进行了交换则A会从0变成1
}
}
if (A == 0) //若A没有变成1意味着数组原本就是升序且是有序的,就不用进行排序直接输出
{
break;
}
}
}
void Show(int arr[], int num) //将数组展示一遍
{
int i = 0;
for (i = 0; i < num; i++) //将数组遍历打印
{
printf("%d ", arr[i]);
}
printf("\n");
}
int main()
{
int arr[] = { 3, 2, 5, 6, 4, 9, 1, 7, 5, 3, 1, 2, 0 };
int num = sizeof(arr) / sizeof(arr[0]);
printf("原顺序是:");
Show(arr, num); //展示原本的顺序
BubbleSort(arr,num); //进行冒泡排序
printf("交换后是:"); //展示排序后的数组
Show(arr, num);
return 0;
}
结果展示
版权声明:本文为LCW0102原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。