在實際工作上有種需求, 就是需要從給定的資料裡,隨機抽取一部分。
有一種簡單的方法是根據總的資料條數和要抽取的資料條數, 通過簡單方法,隔幾行取乙個,這樣也能達到隨機抽取一部分的目的。
但這樣,源資料是順序的,則抽取的資料也是順序的,不滿足一些情境。
這裡實現的功能是: 將全部資料,按行重新隨機排列, 這樣從結果頭部選幾行,就是隨機抽取的幾行了,比較方便。
實現的思路: 對於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,也就是用於試探下一步是否可走 ...