洗牌演算法:隨機打亂一個數組
阿新 • • 發佈:2019-01-31
解題思路:
隨機的取出一個(0 - n)之間的資料與a[0]交換。
隨機的取出一個(1 - n)之間的資料與a[1]交換。
隨機的取出一個(2 - n)之間的資料與a[2]交換。
……………..
隨機的取出一個(n-1 - n)之間的資料與a[n-1]交換。
程式碼實現:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
/*
*函數功能:洗牌演算法,隨機打亂一個數組
*函數引數:card 陣列
* nums 陣列元素的個數
*/
int random_card(int* card, int nums)
{
int temp = 0;
int index = 0,now = 0;
/* 判斷指標是否為空 */
if (NULL == card)
{
return 1;
}
/* 隨機數發生器的初始化 */
srand(time(0));
for(index = 0; index < nums - 1; index++)
{
now = rand() % (nums-index) + index;
temp = card[now];
card[now] = card[index ];
card[index] = temp;
}
return 0;
}
int main()
{
int a[10] = {1,2,3,4,5,6,7,8,9,10};
int i = 0;
random_card(a,10);
for(i = 0; i < 10; i++)
{
printf("%d ",a[i]);
}
printf("\n");
return 0;
}