1. 程式人生 > >Algs4-2.1.13紙牌排序-按花色排序

Algs4-2.1.13紙牌排序-按花色排序

位置 保持 排序。 所有 由於 排序 撲克牌 都是 限制

2.1.13紙牌排序。說說你會如何將一副撲克牌按花色排序(花色順序是黑桃、紅桃、梅花和方片),限制條件是所有牌都是背面朝上排成一列,而你一次只能翻看兩張牌或者交換兩張牌(保持背面朝上)。

算法具體描述如下:
1)翻看第一張、第二張牌
2)如果第二張牌的花色小於第一張牌的花色,那麽交換這兩張牌
3)翻看第一張、第三張牌
4)如果第三張牌的花色小於第一張牌的花色,那麽交換這兩張牌,如此反復直到翻看第一張牌和第52張牌
5)翻看第二張牌和第三張牌,第三張花色小於第二張時交換這兩張牌,接著翻看第二張和第四張牌,如此反復直到翻看第二張牌和最後一張牌
6)如此反復直到翻看第39張和第40張牌,如果第40張花色小於第39張,那麽交換這兩張牌。此時所有花色已完成排序。(13張X3種花色=39張,這39張已有序,剩下的13張就是同一種花色了)

算法可再改進部分:
為減少翻看的次數,又由於只有4種牌色,那麽翻看兩張牌時,如果第一張翻看牌的花色是余下牌的最小花色,那麽不需要反復翻看這張牌和其後的所有牌,直接翻看其後的兩張牌。余下牌的最小花色的快整判斷規則是:
令52張牌的52個位置為1至52,由鴿巢原理得出
當翻看的第一張牌的位置是1至13時,最小花色是黑桃。
當翻看的第一張牌的位置是14至26時,最小花色是紅桃。
當翻看的第一張牌的位置是27至39時,最小花色是梅花。
當翻看的第一張牌的位置是40至52時,最小花色是方片

Algs4-2.1.13紙牌排序-按花色排序