C++计数排序算法中如何为数组填充随机数替代手动逐个输入
计数排序代码修改方案(自动生成随机数组)
核心修改说明
你只需要调整头文件引入和main函数中的数组赋值逻辑即可,具体修改点如下:
- 新增2个必要头文件:
<cstdlib>提供随机数相关函数,<ctime>用于初始化随机种子,保证每次运行生成的随机值不同 - 删除原代码中手动输入数组元素的
cin循环,替换为rand()赋值逻辑 - 可选:增加原数组打印逻辑,方便对比排序前后的结果
如果需要调整随机数的生成范围,比如要生成0~N之间的整数,修改rand() % (N+1)即可。
完整修改后代码
#include <iostream> #include <cstdlib> #include <ctime> using namespace std; int k=0; void sort_func(int A[],int B[],int n) { int count[k+1],t; for(int i=0;i<=k;i++) { count[i] = 0; } for(int i=0;i<n;i++) { t = A[i]; count[t]++; } for(int i=1;i<=k;i++) { count[i] = count[i]+count[i-1]; } for(int i=0;i<n;i++) { t = A[i]; B[count[t]] = t; count[t]=count[t]-1; } } int main() { // 初始化随机种子,全局只需调用一次 srand(time(0)); int n; cout<<"Enter the size of the array :"; cin>>n; int A[n],B[n]; // 替换手动输入为随机生成,示例默认生成0~99之间的随机整数 cout<<"生成的原数组为:"; for(int i=0;i<n;i++) { A[i] = rand() % 100; // 这里的100控制随机数上限,可自行调整 cout<<A[i]<<" "; if(A[i]>k) { k = A[i]; } } cout<<endl; sort_func(A,B,n); cout<<"排序后的数组为:"; for(int i=1;i<=n;i++) { cout<<B[i]<<" "; } cout<<"\n"; return 0; }
注:原代码中的变长数组
int A[n], B[n]属于C语言特性,部分C编译器可能不支持,如果需要兼容标准C,可以将数组替换为vector<int>实现。
内容的提问来源于stack exchange,提问作者Mehmet
相关产品推荐
相关产品推荐

