#include <stdio.h>
int i, j;
void print(double arr[])
{
for (i = 0; i < 10; i++)
{
if (i != 9)
printf("%1.2f, ", arr[i]); //%1.2f表示小数点前一位,小数点后精确到两位
else
printf("%1.2f", arr[i]); //%1.2f表示小数点前一位,小数点后精确到两位
}
}
//冒泡:
//以升序排序为例冒泡排序的思想:相邻元素两两比较,将较大的数字放在后面,直到将所有数字全部排序。
//就像小学排队时按大小个排一样,将一个同学拉出来和后面的比比,如果高就放后面,一直把队伍排好。
void mppx(double arr[])
{
for (i = 8; i >= 0; i--)
{
for (j = 0; j <= i; j++)
{
if (arr[j] > arr[j + 1]) //当前面的数比后面的数大时
{
double temp; //定义临时变量temp
temp = arr[j];//将前面的数赋值给temp
arr[j] = arr[j + 1]; //前后之数颠倒位置
arr[j + 1] = temp;//将较大的数放在后面
}
}
}
printf("\n************冒泡排序*************\n");
print(arr);
}
//第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,
//然后再从剩余的未排序元素中寻找到最小(大)元素,继续放在起始位置知道未排序元素个数为0。
void xzpx(double arr[])
{
for (i = 0; i < 8 - 1; i++)//排序的次数 = 元素个数 - 1。
{
int min = i;
for (j = i + 1; j < 8-i; j++)//比较次数=元素个数-i(本轮序号)
if (arr[j] < arr[min])
min = j;//记录交换的元素下标值
if (i != min)
{
double temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;//将最小的数浮到本次循环最前面,即arr【i】
}
}
printf("\n************选择排序*************\n");
print(arr);
}
int main()
{
double arr[] = { 1.78, 1.77, 1.82, 1.79, 1.85, 1.75, 1.86, 1.77, 1.81, 1.80 };
printf("\n************排队前*************\n");
for (i = 0; i < 10; i++)
{
if (i != 9)
printf("%1.2f, ", arr[i]); //%1.2f表示小数点前一位,小数点后精确到两位
else
printf("%1.2f", arr[i]); //%1.2f表示小数点前一位,小数点后精确到两位
}
mppx(arr);
xzpx(arr);
}
选择排序与冒泡排序
最新推荐文章于 2023-11-01 00:35:24 发布