原题链接:最小三个数
解题思路:
这个题看似简单,是用排序算法做的。还是有一点点坑的,当然我入坑了。我刚开始用的快速排序法,写的排序部分,结果运行结果是内存超限,现在我还没搞懂为什么,等我弄懂了会在下面更新的,要保持关注啊!已经找到了错误,原来是调用函数来递归排序那一步出错了,一不小心把它写while循环里面了
冒泡排序法思路:冒泡排序是最简单的排序算法之一,就是比较前后两个数,如果前面的数大于后面的数就交换,反之不变。通过不断遍历来完成此操作,相比于快速排序法来说运行时间有点慢。
注意事项:
冒泡排序的循环条件不要写错了,第一层循环写到len - 1就可以了,因为到遍历到倒数第二个数就能与最后一个进行比较了。而第二层循环写成len-1-i是因为,经过第一次循环,最后几个数已经排好序了。(有什么错误的,欢迎指点)
参考代码:
冒泡排序法:
#include void bubble_sort(int nums[],int len)
{
int i,j,temp;
for(i = 0;i < len - 1;i++)//不能遍历到最后一个元素,不然会越界
{
for(j = 0;j < len - 1 - i;j++)//遍历到这即可,因为最后几个数已经排好序了
{
if(nums[j] > nums[j + 1])//如果前面的数大于后面的数,就互换
{
temp = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = temp;
}
}
}
}
int main()
{
int n;
scanf("%d",&n);
int i,nums[100];
for(i = 0;i < n;i++)
{
scanf("%d",&nums[i]);
}
bubble_sort(nums,n);//这里传入数组和数组长度
for(i = 0;i < 3;i++)
{
printf("%d ",nums[i]);
}
return 0;
}快速排序法
#include <stdio.h>
void quick_sort(int nums[],int l,int r)
{
if(l >= r)
return;
int i = l - 1,j = r + 1,x = nums[(l + r) / 2];
while(i < j)
{
do i++;while(nums[i] < x);
do j--;while(nums[j] > x);
if(i < j)
{
int t = nums[i];
nums[i] = nums[j];
nums[j] = t;
}
}
quick_sort(nums,l,j);
quick_sort(nums,j + 1,r);
}
int main()
{
int n;
scanf("%d",&n);
int i,nums[120];
for(i = 0;i < n;i++)
{
scanf("%d",&nums[i]);
}
quick_sort(nums,0,n - 1);//快速排序法
for(i = 0;i < 3;i++)
{
printf("%d ",nums[i]);
}
return 0;
}C++代码
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int n,nums[110];
cin >> n;
for(int i = 0;i < n;i++)
cin >> nums[i];
sort(nums,nums + n);
for(int i = 0;i < 3;i++)
cout << nums[i] << " ";
cout << endl;
return 0;
}0.0分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复