c语言实现冒泡排序和选择排序
注意:都以升序为例。
一.冒泡排序
思路:
- 从第一个数开始,依次相邻两个数比较,将大的放后面,直到比完一轮,最后一个数一定是最大的数。
- 继续从第一个数开始,重复第一步,但是本次不用和最后一个数比较,因为最后一个数已经确定为最大,所以本次比较范围缩减,确定了倒数第二个数一定为第二大数。
- 重复第二步,不断将当前范围减小,直至第一个数就是最小的数。
本质:比较n-1轮(n为数组的长度),每一轮确定一个目前范围内最大的数(末位),范围不断缩减。
实现:
#include <stdio.h>
int main()
{
double arr[10] = {1.78, 1.77, 1.82, 1.79, 1.85, 1.75, 1.86, 1.77, 1.81, 1.80};
// 1.比较n-1轮
for (int i = 1; i <= 9; i++)
{
// 2.两两比较 范围不断缩小
for (int j = 0; j <= 9 - i; j++)
{
if (arr[j] > arr[j + 1])
{
double temp = arr[j + 1]; //将小的临时保存下来
arr[j + 1] = arr[j]; //大的放后面
arr[j] = temp; //小的放前面
}
}
}
//打印排序后的数组
for (int i = 0; i < 10; i++)
{
printf("%.2f ", arr[i]);
}
}
二.选择排序
思路:
- 从第一个数开始,依次和后面的每一个数比较,谁小谁放第一个位置,直到比完一轮,第一个数一定是最小的数。
- 从第二个数开始,重复第一步,确定第二个位置一定为倒数第二小的数。
- 重复第二步,不断缩减范围,直至最后一个数就是最大的数。
本质:比较n-1轮(n为数组的长度),每一轮确定一个目前范围内最小的数(首位),范围不断缩减。
实现:
#include <stdio.h>
int main()
{
double arr[10] = {1.78, 1.77, 1.82, 1.79, 1.85, 1.75, 1.86, 1.77, 1.81, 1.80};
// 1.比较n-1轮
for (int i = 0; i <= 8; i++)
{
// 2.每轮第一个数与后面每位比较,范围不断缩小
for (int j = i + 1; j <= 8; j++)
{
if (arr[i] > arr[j])
{
double temp = arr[j]; //将小的临时保存下来
arr[j] = arr[i]; //大的放后面
arr[i] = temp; //小的放前面
}
}
}
//打印排序后的数组
for (int i = 0; i < 10; i++)
{
printf("%.2f ", arr[i]);
}
}