C語言實現檔案內容按行隨機排列的演算法示例

2022-09-27 10:39:11 字數 1565 閱讀 2031

在實際工作上有種需求, 就是需要從給定的資料裡,隨機抽取一部分。

有一種簡單的方法是根據總的資料條數和要抽取的資料條數, 通過簡單方法,隔幾行取乙個,這樣也能達到隨機抽取一部分的目的。

但這樣,源資料是順序的,則抽取的資料也是順序的,不滿足一些情境。

這裡實現的功能是: 將全部資料,按行重新隨機排列, 這樣從結果頭部選幾行,就是隨機抽取的幾行了,比較方便。

實現的思路:  對於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的實現

#include

#include

#include

#include

using namespace std;

const int len = 4098;

//返回屬於[p,q)的隨機整數

int rand(int p, int q)

//交換兩個元素值

void swap(int& a , int& b)

//列印陣列值

void print(int *v, int n)www.cppcns.com

}//給陣列a[n], 隨機不重複賦值[1,n]之間的數

void randomize(int *v, int n)

for(int i=n-1; i>0; i--)

}//刪除換行符

int chaeufxnkomp(char *str)

return len;

}//主函式

int main(int argc, char *ar**)

file* outfile = fopen(ar**[3], "w");

if( outfile == null)

int i=0;

char str[len];

str[0] = 0;

str[len-1] = 0;

while( !feof(infile) )

str[len- 1] = 0;

chomp(str);

fprintf(outfile, "%s\t%u\n", str, value[i]);

i++;

}fclose(infile);

fclose(outfile);

return 0;

}本文標題: c語言實現檔案內容按行隨機排列的演算法示例

本文位址:

將檔案內容按行隨機排列

在實際工作上有種需求,就是需要從給定的資料裡,隨機抽取一部分。有一種簡單的方法是根據總的資料條數和要抽取的資料條數,通過簡單方法,隔幾行取乙個,這樣也能達到隨機抽取一部分的目的。但這樣,源資料是順序的,則抽取的資料也是順序的,不滿足一些情境。這裡實現的功能是 將全部資料,按行重新隨機排列,這樣從結果...

將檔案內容按行隨機排列

在實際工作上有種需求,就是需要從給定的資料裡,隨機抽取一部分。有一種簡單的方法是根據總的資料條數和要抽取的資料條數,通過簡單方法,隔幾行取乙個,這樣也能達到隨機抽取一部分的目的。但這樣,源資料是順序的,則抽取的資料也是順序的,不滿足一些情境。這裡實現的功能是 將全部資料,按行重新隨機排列,這樣從結果...

c語言實現排列

感覺程式設計的時候是孰能生巧,之前對於dfs一直覺得是高大上的樣子,直到最近敲了幾次後發現總是有套路的,總結套路如下 首先有3個全域性變數 1.visit 陣列 標記走過的內容 2.flag 陣列 標記陣列是否走過 3.m,n 是乙個全域性變數 用作於遍歷中的step,也就是用於試探下一步是否可走 ...