1.大体思路
遍历数组,每次将数组内的数字随机得与数组内任意数进行交换,实现方式为随机生成【0,nLen - 1】的数作为带交换数字的索引值。使用带索引或者地址作为形参的Swape函数进行交换操作,相比于前一篇文章中使用结构体和插入排序实现随机排列数组,本方法更加简单轻便。
2.程序如下
#include <iostream>
#include <ctime>
#include <windows.h>
using namespace std;
void InitArr(int* nArr, int nLen) { //初始化数组
srand(time(NULL));
for(int i = 0; i < nLen; ++i) {
//nArr[i] = rand() % 100;
nArr[i] = i;
}
}
void PrintArr(int* pnArr, int nLen) { //打印数组
for(int i = 0; i < nLen; ++i) {
cout << pnArr[i] << " ";
}
cout << endl;
}
void Swape(int *p, int *q) {
int tmp = *p;
*p = *q;
*q = tmp;
}
void RandomSort(int *nArr, int nLen) {
srand(time(NULL));
for(int i = 0; i < nLen; ++i) {
int nIndex = rand() % nLen;
Swape(&nArr[i], &nArr[nIndex]);
Sleep(2000); //等待2s,更新随机种子
}
}
int main() {
int nLen = 10;
int nArr[nLen];
InitArr(nArr, nLen);
PrintArr(nArr, nLen);
cout << endl;
int T = 10;
while(T--) { //输出10次随机排序的结果
srand(time(NULL));
RandomSort(nArr, nLen);
PrintArr(nArr, nLen);
}
return 0;
}
3.输出结果如下