题目:冒泡排序
题目要求:假设有一组整数(如下)需要排序,排序为升序。
int arr[10] = { 11,23,32,1,234,89,45,64,243,0 };
1.冒泡排序的基本思想
两两相邻的元素比较,如果不满足顺序,就交换位置。
一趟冒泡排序:使最大的数字待在了最后一位,解决了一位数字
11,23,32,1,234,89,45,64,243,0
11、23比较,满足顺序,不交换
23、32比较,满足顺序,不交换
32、1比较,不满足顺序,交换 11、23、1、32、234、89、45、64、243、0
32、234比较,满足顺序,不交换
234、89比较,不满足顺序,交换 11、23、1、32、89、234、45、64、243、0
234、45比较,不满足顺序,交换 11、23、1、32、89、45、234、64、243、0
234、64比较,不满足顺序,交换 11、23、1、32、89、45、64、234、243、0
234、243比较,满足顺序,不交换
243、0比较,不满足顺序,交换 11、23、1、32、89、45、64、234、0、243
第二趟的时候:就不用管最后一个数字
……
一趟可以解决一个数字,10 个数字只用 9 趟就可以完成排序
2.冒泡排序的代码实现
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//冒泡排序
int main()
{
int arr[10] = { 11,23,32,1,234,89,45,64,233,0 };
int sz = sizeof(arr) / sizeof(arr[0]);
int i, j;
int temp = 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;
}
}
}
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
运行结果: