有很多的方法进行排序,但在实验过程中我需要打乱的算法,从http://blog.csdn.net/cxllyg/article/details/7986352找到了一个打乱算法,亲测可用。
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
void disorder(int a[], int n)
{
int index, tmp, i;
srand(time(NULL));
for(i=0; i<n; i++)
{
index=rand()%(n-i)+i;
if(index!=i)
{
tmp=a[i];
a[i]=a[index];
a[index]=tmp;
}
}
}
int main()
{
int a[100];
int i;
for(i=0; i<100; i++)
a[i]=i;
disorder(a, 100);
for(i=0; i<100; i++)
cout<<a[i]<<endl;
getchar();
return 0;
}
**基本思想是,从头到尾将每一个元素与数组中的一个随机元素进行调换。这样能确保每个元素在每个位置的概率都是1/n。
可知算法复杂度为:O(n)。**
附排序算法连接:http://blog.csdn.net/hguisu/article/details/7776068
2017/2/3
补充Java实现:
package com.way.algorithm;
/**
* 测试数组打乱算法
* @author reus
*
*/
public class DisorderArray {
public static Object[] disorderArray(Object[] objectArr){
int size=objectArr.length;
Object temp=null;
int rand;
for(int i=0;i<size;i++){
rand=(int)(Math.random()*size);
temp=objectArr[i];
objectArr[i]=objectArr[rand];
objectArr[rand]=temp;
}
return objectArr;
}
public static void main(String[] args){
Object[] arr={1,2,3,4,5,6,7,8,9,10};
arr=DisorderArray.disorderArray(arr);
for(int i=0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
}
结果
6
10
2
8
4
3
1
9
7
5