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.输出结果如下
本文介绍了一种通过随机交换数组元素实现数组随机排序的方法,并提供了完整的C++代码实现。该算法利用随机数生成器来选择数组中的两个元素进行交换,以此达到随机排序的目的。
4046

被折叠的 条评论
为什么被折叠?



