本文实例讲述了C语言实现文件内容按行随机排列的算法。分享给大家供大家参考,具体如下:

在实际工作上有种需求, 就是需要从给定的数据里,随机抽取一部分。
有一种简单的方法是根据总的数据条数和要抽取的数据条数, 通过简单方法,隔几行取一个,这样也能达到随机抽取一部分的目的。
但这样,源数据是顺序的,则抽取的数据也是顺序的,不满足一些情境。
这里实现的功能是: 将全部数据,按行重新随机排列, 这样从结果头部选几行,就是随机抽取的几行了,比较方便。
实现的思路: 对于N行的数据, 给每一行用[1-N]之间不重复的数做标记, 最后按标记数排列即可。(不重复上要稍微费点儿心思)
实现思路比较重要,实现就简单了~
实现上用c结合shell的方式,下面为参考代码。
总控脚本:用不重复随机数做标记,然后按标记排序
#!/bin/sh ### note: sh random.sh in_fname out_fname ### infile=$1 outfile=$2 line_num=`cat $infile | wc -l ` ./random $line_num $infile $outfile.tmp sort $outfile.tmp -k 2 -n -t ' ' | cut -f1 > $outfile
随机化的执行程序random的实现
//random.c
#include <string>
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
const int LEN = 4098;
//返回属于[p,q)的随机整数
int rand(int p, int q)
{
int size = q-p+1;
return p+ rand()%size;
}
//交换两个元素值
void swap(int& a , int& b)
{
int temp = a;
a = b;
b = temp;
}
//打印数组值
void print(int *v, int n)
{
for(int i=0; i < n ; i++)
{
printf("%u\n", v[i]);
}
}
//给数组a[n], 随机不重复赋值[1,n]之间的数
void randomize(int *v, int n)
{
//initialize
for(int i=0; i < n; i++)
{
v[i] = i+1;
}
for(int i=n-1; i>0; i--)
{
int r = rand(0,i+1);
swap(v[r], v[i]);
}
}
//删除换行符
int chomp(char *str)
{
int len = strlen(str);
while(len > 0 && (str[len - 1] == '\n' || str[len - 1] == '\r'))
{
str[len - 1] = 0;
len--;
}
return len;
}
//主函数
int main(int argc, char *argv[])
{
int line_num = atoi(argv[1]);
printf("%u\n",line_num);
int *value = (int*)malloc((line_num) * sizeof(int));
printf("%u\n",line_num);
randomize(value, line_num);
//print(value, N);
FILE* infile = fopen(argv[2], "r");
if( infile == NULL )
{
printf("Cann't open file %s.", argv[1]);
return 0;
}
FILE* outfile = fopen(argv[3], "w");
if( outfile == NULL)
{
printf("Cann't open file %s to write.", argv[2]);
return 0;
}
int i=0;
char str[LEN];
str[0] = 0;
str[LEN-1] = 0;
while( !feof(infile) )
{
if( !fgets(str, sizeof(str),infile))
{
break;
}
str[LEN- 1] = 0;
chomp(str);
fprintf(outfile, "%s\t%u\n", str, value[i]);
i++;
}
fclose(infile);
fclose(outfile);
return 0;
}
希望本文所述对大家C语言程序设计有所帮助。
# C语言
# 文件内容
# 按行
# 随机
# 排列
# C语言数据结构之二叉树的非递归后序遍历算法
# 必须知道的C语言八大排序算法(收藏)
# C语言基本排序算法之桶式排序实例
# C语言基本排序算法之shell排序实例
# C语言排序算法之冒泡排序实现方法【改进版】
# C语言基本排序算法之插入排序与直接选择排序实现方法
# C语言实现运筹学中的马氏决策算法实例
# c语言实现基数排序解析及代码示例
# 几行
# 条数
# 随机数
# 也能
# 有一种
# 给大家
# 所述
# 工作上
# 上要
# 不满足
# 然后按
# 最后按
# 换行符
# 讲述了
# 在实际
# 随机化
# in_fname
# random
# out_fname
# infile
相关文章:
如何用腾讯建站主机快速创建免费网站?
官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站
零基础网站服务器架设实战:轻量应用与域名解析配置指南
网页设计网站制作软件,microsoft office哪个可以创建网页?
青岛网站建设如何选择本地服务器?
建站之星在线客服如何快速接入解答?
如何快速搭建自助建站会员专属系统?
如何用VPS主机快速搭建个人网站?
如何快速完成中国万网建站详细流程?
佛山企业网站制作公司有哪些,沟通100网上服务官网?
名字制作网站免费,所有小说网站的名字?
c++怎么使用类型萃取type_traits_c++ 模板元编程类型判断【方法】
建站为何优先选择香港服务器?
宝塔新建站点为何无法访问?如何排查?
c# 服务器GC和工作站GC的区别和设置
网站app免费制作软件,能免费看各大网站视频的手机app?
网站设计制作公司地址,网站建设比较好的公司都有哪些?
h5网站制作工具有哪些,h5页面制作工具有哪些?
公司网站的制作公司,企业网站制作基本流程有哪些?
jQuery 常见小例汇总
微课制作网站有哪些,微课网怎么进?
教程网站设计制作软件,怎么创建自己的一个网站?
移民网站制作流程,怎么看加拿大移民官网?
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
建站VPS推荐:2025年高性能服务器配置指南
网站制作软件有哪些,制图软件有哪些?
商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?
建站主机如何安装配置?新手必看操作指南
武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?
高性能网站服务器部署指南:稳定运行与安全配置优化方案
建站之星如何配置系统实现高效建站?
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
制作充值网站的软件,做人力招聘为什么要自己交端口钱?
已有域名建站全流程解析:网站搭建步骤与建站工具选择
如何使用Golang table-driven基准测试_多组数据测量函数效率
如何快速搭建高效香港服务器网站?
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
html制作网站的步骤有哪些,iapp如何添加网页?
深圳 网站制作,深圳招聘网站哪个比较好一点啊?
php条件判断怎么写_ifelse和switchcase的使用区别【对比】
网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?
建站主机服务器选购指南:轻量应用与VPS配置解析
制作网站的软件下载免费,今日头条开宝箱老是需要下载怎么回事?
建站之星云端配置指南:模板选择与SEO优化一键生成
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
内部网站制作流程,如何建立公司内部网站?
Thinkphp 中 distinct 的用法解析
Python路径拼接规范_跨平台处理说明【指导】
用v-html解决Vue.js渲染中html标签不被解析的问题
网站插件制作软件免费下载,网页视频怎么下到本地插件?
*请认真填写需求信息,我们会在24小时内与您取得联系。