全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C语言实现文件内容按行随机排列的算法示例

本文实例讲述了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小时内与您取得联系。