您的位置:首页 > 其它

随机排列数组

2017-12-04 14:46 183 查看
1.思路:

创建一个结构体{int, int*},前者为随机生成的整数,后者保存对应位数组的地址,再对前者进行插入排序,排序完后者对应的数组值即达到随机打散的目的,代码如下:

#include <iostream>
#include <ctime>
#include <windows.h>
using namespace std;

struct Nodes {
int nValue;
int *pnValue;
} pnodeArr;

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 InsertSort(Nodes* pnodeArr, int nLen) {       //对Nodes.nValue进行插入排序
for(int i = 1; i < nLen; ++i) {
Nodes tmp = pnodeArr[i];
int j;
for(j = i - 1; j >= 0 && tmp.nValue < pnodeArr[j].nValue; --j) {
pnodeArr[j + 1] = pnodeArr[j];
}
pnodeArr[j + 1] = tmp;
}
}

void RandomArr(int *pnArr, int nLen) {
int i;
Nodes *pnodeArr = new Nodes[nLen];
int *pnArrTmp = new int[nLen];
srand(time(NULL));
for(i = 0; i < nLen; ++i) {
pnArrTmp[i] = pnArr[i];
pnodeArr[i].nValue = rand() % 1000;            //Nodes.nValue是随机生成
pnodeArr[i].pnValue = &pnArrTmp[i];            //Nodes.pnValue用来记录原始数据的地址
}

InsertSort(pnodeArr, nLen);                        //插入排序

for(i = 0; i < nLen; ++i) {
pnArr[i] = *(pnodeArr[i].pnValue);
}
delete [] pnArrTmp;
delete [] pnodeArr;

}

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));
RandomArr(nArr, nLen);
PrintArr(nArr, nLen);
Sleep(2000);                 //等待2s,更新随机种子

}

return 0;
}


2.输出结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  结构 插入排序