#include "stdafx.h" #include <iostream> #include "ctime" using namespace std; // // 洗牌算法。 // 一个有N个数值的数值队列,将它随机打散。 // 如:1,2,3,4,5,6,7,8,9,10,11,12,13 // 交换第N++个数值与范围内的随机一个数值。循环一遍即可。 void swap_int(int* i,int* j) { int temp = *i; *i = *j; *j = temp; } static int iseedappend = 0; void rand_card(int iArray[],int count) { if (count < 2) { return; } time_t cur_time = time(0); cout << "random seed = " << hex << cur_time << endl; srand(cur_time+(iseedappend++));//这样即使是同一时间调用这个函数也能获取不同的结果 for (int i=0;i!=count;++i) { int iswapPos = rand()%(count-1); if (i == iswapPos) { continue; } swap_int(&iArray[i],&iArray[iswapPos]); } } int _tmain(int argc, _TCHAR* argv[]) { int iValueToSort[64]; int InputValue; int iCount = 0; cout << "plz enter values to sort.press ctrl+break to end input!" <<endl; cout << "values:/t"; while (cin>>InputValue) { iValueToSort[iCount++] = InputValue; } cout << "The values you enter are :" << endl; for (int i=0;i!=iCount;++i) { cout << iValueToSort[i] << '/t'; } cout << '/n' << "Total count = " << iCount <<endl; int testcount = 20; int testArray[64]; while (testcount --) { memcpy(testArray,iValueToSort,64*sizeof(int)); rand_card(testArray,iCount); for (int i = 0; i!= iCount; ++i) { cout << testArray[i] << '/t'; } cout << endl; } return 0; }