1. 程式人生 > >洗牌演算法:隨機打亂一個數組

洗牌演算法:隨機打亂一個數組

解題思路:
     隨機的取出一個(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; }