日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

一步一步写算法(之洗牌算法)

發(fā)布時(shí)間:2023/12/15 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 一步一步写算法(之洗牌算法) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.


【 聲明:版權(quán)全部,歡迎轉(zhuǎn)載,請(qǐng)勿用于商業(yè)用途。 ?聯(lián)系信箱:feixiaoxing @163.com】


?? ?撲克牌洗牌是我們生活中比較喜歡玩的一個(gè)游戲。那么我們有沒(méi)有什么辦法自己設(shè)計(jì)一個(gè)撲克牌洗牌的方法呢?在c執(zhí)行庫(kù)其中有一個(gè)隨機(jī)函數(shù)rand,它能夠生成0~32767之間的隨意數(shù)。那么有沒(méi)有可能利用這么一個(gè)函數(shù)對(duì)我們撲克牌進(jìn)行隨即洗牌呢?

?? ?在這里我拋磚引玉一下,談一談自己眼下已經(jīng)看到的兩個(gè)算法。歡迎朋友們談一談其它的方法。

?? ?(1)全局洗牌法

?? ?過(guò)程例如以下所看到的:

?? ?a)首先生成一個(gè)數(shù)組,大小為54,初始化為1~54

?? ?b)依照索引1到54,逐步對(duì)每一張索引牌進(jìn)行洗牌,首先生成一個(gè)余數(shù) value = rand %54,那么我們的索引牌就和這個(gè)余數(shù)牌進(jìn)行交換處理

?? ?c)等多索引到54結(jié)束后,一副牌就洗好了

?? ?代碼例如以下所看到的:

void get_rand_number(int array[], int length) {int index;int value;int median;if(NULL == array || 0 == length)return ;/* 每次發(fā)牌的時(shí)候隨意分配待交換的數(shù)據(jù) */for(index = 0; index < length; index ++){value = rand() % length;median = array[index];array[index] = array[value];array[value] = median;} }


?? ?(2)局部洗牌法

?? ?上面的算法很easy,可是有一個(gè)問(wèn)題,我們發(fā)現(xiàn)每次洗牌之后原來(lái)洗好的牌都會(huì)進(jìn)行二次操作,個(gè)人認(rèn)為有點(diǎn)說(shuō)只是去,所以最好還是加以改進(jìn):

?? ?a)相同,首先我們生成一個(gè)大小為54的數(shù)組,數(shù)組排列為1~54

?? ?b)索引牌從1開(kāi)始,到54結(jié)束。這一次索引牌僅僅和剩下還沒(méi)有洗的牌進(jìn)行交換, value = index + rand() %(54 - index)

?? ?c)等到全部的索引牌都洗好之后,一副牌就弄好了

?? ?代碼例如以下所看到的:

void get_rand_number(int array[], int length) {int index;int value;int median;if(NULL == array || 0 == length)return ;/* 發(fā)牌的時(shí)候?qū)τ谝呀?jīng)分配的數(shù)據(jù)不再改動(dòng) */for(index = 0; index < length; index ++){value = index + rand() % (length - index);median = array[index];array[index] = array[value];array[value] = median;} }

注: 以上兩個(gè)算法都不是我想出來(lái)的,歡迎算法的初始作者和我聯(lián)系,我會(huì)在文章中加入標(biāo)記說(shuō)明。



總結(jié)

以上是生活随笔為你收集整理的一步一步写算法(之洗牌算法)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。