解题思路:
这个题看似简单,是用排序算法做的。还是有一点点坑的,当然我入坑了。我刚开始用的快速排序法,写的排序部分,结果运行结果是内存超限,现在我还没搞懂为什么,等我弄懂了会在下面更新的,要保持关注啊!已经找到了错误,原来是调用函数来递归排序那一步出错了,一不小心把它写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++代码)(这里推荐用switch)浏览:999 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:333 |
C语言训练-尼科彻斯定理 (C语言代码)。。。内含证明定理浏览:2142 |
C语言训练-求函数值 (C语言代码)浏览:944 |
校门外的树 (C语言代码)浏览:1166 |
简单的a+b (C语言代码)浏览:827 |
十->二进制转换 (C语言代码)浏览:1330 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:1261 |
C语言程序设计教程(第三版)课后习题8.4 (C语言代码)浏览:631 |
最小公倍数 (C语言代码)浏览:1106 |
StarHui 2022-11-18 21:23:41 |
还有哥们再关注吗?原来是我之前那个快排模板写错了,把递归调用函数排序写在了while循环里面