目标:
使用冒泡排序对一个数组进行排序
要求:
(1)从小到大输出排序结果
(2)输出每一趟排序
(3)计算交换多少次
一 、将数组元素输入
本题要求先输入数组元素个数后再输入对应个数的元素后存入数组中再进行排序,主函数如图:
#include
int main()
{
//int arr[] = { 9,8,7,6,5,4,3,2,1 };
int i = 0;
int n = 0;
int arr[9] = {0};
scanf_s("%d", &n);//输入数组元素个数
for (i = 0; i < n; i++)//将数组元素存入数组中
{
scanf_s("%d", &arr[i]);
}
int sz = sizeof(arr) / sizeof(arr[0]);//求出数组的长度
bubble(arr, sz);//冒泡排序的函数
return 0;
}
二、进行冒泡排序
在输入数组元素后建立一个函数对数组进行排序并将数组输出,
以下为简单的冒泡排序代码:
void bubble(int arr[], int sz)
{
int i, j, temp;
for (i = 0; i < sz - 1; i++)
{
for (j = 0; j < sz - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
for (j = 0; j < sz; j++)
{
printf("%d ", arr[j]);
}
}
}
注意:
冒泡排序的原理是将第一个元素与后面的元素进行比大小 若改元素满足题目要求则二者进行替换,以此类推,将元素从左至右进行依次排序,如若需要对冒泡排序的次数、元素交换次数及每次冒泡排序后的结果进行打印出来便于更直观的看则可对上述代码进行优化,得到以下代码:
void bubble(int arr[], int sz)
{
int i, j, temp;
int count = 0;
for (i = 0; i < sz - 1; i++)
{
for (j = 0; j < sz - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
count++;
}
}
printf("第%d轮冒泡排序:", i + 1);//打印每轮的冒泡排序
for (j = 0; j < sz; j++)
{
printf("%d ", arr[j]);
}
printf("\n\n");
}
printf("最终结果是: ");//打印最终结果
for (i = 0; i <= sz - 1; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
printf("共交换%d次", count);//打印次数
}
由于在main函数中已经输入过n,则n即为数组的长度,后续无需再进行
int sz = sizeof(arr[])/sizeof(arr[0]);的计算 所以上述代码中该语句可删除
完整代码如下:
#include
void bubble(int arr[], int sz)
{
int i, j, temp;
int count = 0;
for (i = 0; i < sz - 1; i++)
{
for (j = 0; j < sz - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
count++;
}
}
printf("第%d轮冒泡排序:", i + 1);//打印每轮的冒泡排序
for (j = 0; j < sz; j++)
{
printf("%d ", arr[j]);
}
printf("\n\n");
}
printf("最终结果是: ");//打印最终结果
for (i = 0; i <= sz - 1; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
printf("共交换%d次", count);//打印次数
}
int main()
{
//int arr[] = { 9,8,7,6,5,4,3,2,1 };
int i = 0;
int n = 0;
int arr[9] = {0};
scanf_s("%d", &n);
for (i = 0; i < n; i++)
{
scanf_s("%d", &arr[i]);
}
int sz = sizeof(arr) / sizeof(arr[0]);
bubble(arr, sz);
return 0;
}