c++中如何实现随机排序?

供稿:hz-xin.com     日期:2025-01-15
C++中如何实现数组的随机排序呢

你是指把一个数列随机打乱顺序么?一楼明显是冒泡排序啊……
楼主倒是说话啊,你不说清楚大家怎么帮你呢……
这样吧,我在CSDN找了一个标准c++实现的乱序小程序,你先看看吧。
#include
#include
using namespace std;
int main()
{
int a[10] = {1,2,3,4,5,6,7,8,9,10};
int* a_begin = a;
int* a_end = a + sizeof(a)/sizeof(int);
random_shuffle(a_begin,a_end);
for(int* p = a_begin; p!=a_end; p++)
{
cout<<*p<<"";
}
}

#include

#define NUMBER 20

using namespace std;

int main()
{
int index = 0;
int iValue = 0;
int strArr[NUMBER];

//产生随机数填充数组
for(;index < NUMBER; ++index)
{
iValue = rand();
strArr[index] = iValue;
}

//输出没有排序之前的数组
for(index = 0; index < NUMBER; ++index)
{
cout<<strArr[index]<<"";
}
cout<<endl;

//对数组进行排序
int temp = 0;
for(int oInd = 0; oInd < NUMBER; ++oInd)
{
for(int iInd = oInd; iInd < NUMBER; ++iInd)
{
if(strArr[oInd] > strArr[iInd])
{
temp = strArr[iInd];
strArr[iInd] = strArr[oInd];
strArr[oInd] = temp;
}
}
}

//将排序后的数组再次输出进行比较
for(index = 0; index < NUMBER; ++index)
{
cout<<strArr[index]<<"";
}
cout<<endl;



system("pause");
return 0;
}

随机排序无非就是打乱原来的顺序,既然要随机,那就要用到c++的srand(time(NULL))来设置随机种子,在这个基础之上就可以用rand()这样的函数去随机产生一个随机数.

你的数据是多少就产生多少随机数,并过滤已产生的随机数就可以了.
比如你有一个数据BYTE n[4] = {1,3,5,4};
那么你可以rand()%4这样的方式去产生一个随机数,同样的需要产生4次随机数,而且从第二次开始你要判断所产生的随机数是不是已经用过了(上一次随机产生了), 如果已用过,继续产生随机数,一直到全部随机数产生出来.
然后根据你的随机数,其实也是你数据数组的下标, 自己把数据排列一下就OK了.
这种方式应该可以达到完全随机效果,每一次运行具备随机性.

我使用这样一种算法:
srand(time(0));
for(i = 0;i<n;i++)
{
j = rand()%n;
swap(a[i], a[j]);
}
说明:遍历数组的同时,将当前元素与数组中随机位置的元素交换,实现将数组随机排序。
PS.上面的伪码有些地方可能你要自己修改一下,比如swap函数。

c++中如何实现随机排序?
随机排序无非就是打乱原来的顺序,既然要随机,那就要用到c++的srand(time(NULL))来设置随机种子,在这个基础之上就可以用rand()这样的函数去随机产生一个随机数.你的数据是多少就产生多少随机数,并过滤已产生的随机数就可以了.比如你有一个数据BYTE n[4] = {1,3,5,4};那么你可以rand()%4这样的...

c++中怎么将数组里的数随机排序?
c++中将数组里的数随机排序,参考代码如下:include "stdlib.h"#include "stdio.h"main(){ int i,j,k,a[10000],b[10000],n,t; printf("please input the number of integer: "); scanf("%d",&n);for(i = 0; i < n; i++) { a[i] = random(80) + 20; ...

1-100顺序排列 然后随机打乱 再顺序排列的程序怎么做?c++
\/\/冒泡法排序 for(int i=1;i<100;i++)for(int j=i;j<=100;j++){ if(number[i]>number[j])swap(number[i], number[j]);} } void output_num(int number[]){ \/\/输出 for(int i=1;i<=100;i++){ cout<<number[i]<<" ";if(i%10==0) \/\/10个一行 cout<<endl;} } ...

C++ 快速排序 随机30个数字
void swap(int a[], int x, int y){ int tmp=a[x];a[x]=a[y];a[y]=tmp;} void qsort(int a[], int l, int r){ if(l>=r)return;int i;int index=l;for(i=l+1;i<=r;i++){ if(a[i]r)return -1;int mid=(l+r)\/2;if(a[mid]<key)return find(a,mid+1,...

随机产生一组数组 按从大到小排列用JAVA怎么做
在Java中,生成一个随机数组并按从大到小的顺序排列,可以通过以下步骤实现。首先,我们需要导入必要的包,例如java.util包,这包提供了各种实用工具类,包括随机数生成功能。接着,定义一个整型数组,例如int[] number = new int[12000];,用于存储随机生成的整数。接下来,我们需要编写一个选择排序...

随机产生20个100以内的数,输出;按从小到大的顺序排序,输出。(用C语言...
int main(){ int a[20];int i, j, t;srand(time(NULL));for (i = 0; i < 20; i++)a[i] = rand() % 100;for (i = 0; i < 19; i++)for (j = i + 1; j < 20; j++)if (a[i]<a[j]){ t = a[i];a[i] = a[j];a[j] = t;} for (i = 0; i...

随机生成数10万个数进行排序C++
\/\/直接插入排序 void InsertSort(int arrForSort[],int nLength){ int i,j,temp;for(i=1;i<nLength;i++) \/\/遍历整个序列 { temp=arrForSort[i];for(j=i;j>0&&temp<arrForSort[j-1];j--) \/\/将第i个元素插入到合适的位置 arrForSort[j]=arrForSort[j-1];arrForSort[j]=...

求c++程序:无序数组,任意删除一个数,其余的数进行排序
1、随机生成数组——其中N是宏定义的,你可以任意设置你要的数组个数 2、删除任一个你输入的数 3、结果的输出查看 4、排序——只写了最简单的排序,你可以改的效率高点 源程序如下:include "iostream"include "cstdlib"include "ctime"define N 20 using namespace std;int main(){ int my...

C++:随机生成30个100以内的整数,用冒泡法对其排序并10个一行输出,咋编...
using namespace std;int main(int argc,char *argv[]){ int a[30],i,j,k;srand((unsigned)time(NULL));for(i=0;i<30;a[i++]=rand()%100);\/\/生成30个100以内的整数 for(i=0;i<30;i++)\/\/冒泡 for(j=0;j<29;j++)if(a[j]>a[j+1])k=a[j],a[j]=a[j+1],a[j...

1到20这个20个数的随机排序---跪求
\/*把1---20,这20个数随机排序,各种情况都要有*\/ include <stdlib.h> include <stdio.h> include int fun(int a[20]){ int i,j;for(i=0;i<19;i++)for(j=0;j<20;j++)if(a[i]==a[j])return 0;else return 1;} main( ){ int a[20],i,j,k;srand((unsigned)time...