[Powered by Google Translate] [Triye jarèt] [JACKSON STEINKAMP Inivèsite Harvard] [SA A SE CS50. CS50TV] Triye jarèt ki se yon egzanp yon algorithm Fouye - ki se, yon pwosedi pou Fouye yon seri eleman nan yon moute desann oswa lòd. Pou egzanp, si ou te vle sòt yon etalaj ki gen ladan nimewo yo [3, 5, 2, 9], yon aplikasyon kòrèk la nan Triye Bubble ta retounen nan Ranje etalaj [2, 3, 5, 9] nan Ascending lòd. Koulye a, mwen pral eksplike nan pseudocode ki jan algorithm a travay. Se pou nou di nou ap Fouye yon lis 5 nonm antye relatif - 3, 2, 9, 6, ak 5. Algorithm la kòmanse pa gade nan de eleman yo an premye, 3 ak 2, epi tyeke si yo ap soti nan lòd relatif nan chak lòt. Yo se - 3 pi gran pase 2. Pou yo kapab nan lòd montangn yo, yo ta dwe nan lòt fason alantou. Se konsa, nou boukante yo. Koulye a, lis la sanble tankou sa a: [2, 3, 9, 6, 5]. Next, nou gade nan eleman yo, dezyèm ak twazyèm 3 ak 9. Yo ap nan lòd ki kòrèk relatif nan chak lòt. Sa se, 3 se mwens pase 9 Se konsa algorithm a pa boukante yo. Next, nou gade nan 9 ak 6. Yo ap parèt nan lòd. Se konsa,, nou bezwen swap yo paske 9 pi gran pase 6. Anfen, nou gade nan de nonb antye ki sot pase yo, 9 ak 5. Yo ap soti nan lòd, se konsa yo dwe échanges. Apre premye pas konplè a nan lis la, li sanble tankou sa a: [2, 3, 6, 5, 9]. Pa move. Li nan prèske Ranje. Men, nou bezwen kouri nan lis la ankò jwenn li konplètman Ranje. De se mwens pase 3, donk nou pa boukante yo. Twa gen mwens pase 6, donk nou pa boukante yo. Sis gen plis pouvwa pase 5. Nou échanges. Sis se mwens pase 9. Nou pa boukante. Apre pas nan dezyèm nan, li sanble tankou sa a: [2, 3, 5, 6, 9]. Pafè. Koulye a, kite nan ekri li nan pseudocode. Fondamantalman, pou chak eleman nan lis la, nou bezwen gade nan li ak eleman la dirèkteman a dwat li yo. Si yo soti nan lòd relatif nan chak lòt - ki se, si eleman nan sou bò gòch la se pi plis pase youn nan sou bò dwat la - nou ta dwe swap eleman yo de. Nou fè sa pou chak eleman nan lis la, epi nou te fè yon sèl pase nan. Koulye a, nou jis gen nan fè pass-through fwa yo ase yo asire lis la se okonplè, byen Ranje. Men, konbyen fwa nou gen la pase sou lis la garanti ke nou ap fè konsa? Oke, senaryo ki pi mal la-ka se si nou gen yon lis konplètman bak. Lè sa a, li pran yon kantite pase kuvèt-egal a nimewo a nan eleman n-1. Si sa a pa fè sans intuitivement, panse a yon ka senp - lis la [2, 1]. Sa a se pral pran yon sèl pass-through sòt kòrèkteman. [3, 2, 1] - ka ki pi mal se ke ak 3 eleman Ranje bak, li nan pral pran 2 itérations zèl. Apre yon sèl iterasyon, li la [2, 1, 3]. Pwodiksyon an nan dezyèm etalaj la Ranje [1, 2, 3]. Se konsa, ou konnen ou pa janm gen yo ale nan etalaj la, an jeneral, plis pase n-1 fwa, kote n se nimewo a eleman nan yon etalaj la. Yo rele li Triye Bubble paske eleman yo pi gwo yo gen tandans 'jarèt-up' sou bò dwat la yo byen vit. An reyalite, sa a algorithm gen konpòtman trè enteresan. Apre itérations m nan etalaj la an antye, rightmost eleman yo m yo garanti yo dwe klase nan plas ki kòrèk yo. Si ou vle wè sa a pou tèt ou, nou ka eseye li sou yon lis [9, 6, 5, 3, 2] konplètman bak. Apre yon sèl pase nan lis la an antye, [Son nan ekri] [6, 9, 5, 3, 2], [6, 5, 9, 3, 2], [6, 5, 3, 9, 2], [6, 5, 3, 2, 9] eleman nan rightmost 9 se nan plas apwopriye li yo. Apre dezyèm lan pass-through, 6 a ap gen 'bul-up' yo, vin nan dezyèm plas rightmost. Eleman yo de sou bò dwat la - 6 ak 9 - yo pral nan kote ki kòrèk yo apre de kuvèt yo pass-an premye. Se konsa, ki jan nou ka itilize sa-a optimize algorithm a? Oke, apre yon iterasyon nan etalaj la nou pa aktyèlman bezwen tcheke eleman nan rightmost paske nou konnen li la Ranje. Apre de itérations, nou konnen pou asire w rightmost de eleman yo ki nan plas li. Se konsa, an jeneral, apre yo fin itérations k nan etalaj la plen, tcheke eleman yo k pase a se redondants depi nou konnen yo ap nan kote ki kòrèk la deja. Se konsa, si w ap Fouye yon etalaj de n eleman, sou iterasyon nan premye - you'll gen sòt tout nan eleman yo - premye n-0 a. Sou iterasyon, dezyèm lan, ou pral gen fè yon gade nan tout nan eleman yo, men dènye a - premye a n-1. Yon lòt Optimization ta kapab ou tcheke si se lis la deja klase yo apre chak iterasyon. Si li la deja klase, nou pa bezwen fè nenpòt ki plis itérations nan lis la. Ki jan nou ka fè sa? Oke, si nou pa fè okenn echanj sou yon pase nan-nan lis la, li nan klè ki te lis la deja klase paske nou pa t 'swap anyen. Se konsa, nou definitivman pa bezwen sòt ankò. Petèt ou ta ka inisyalize yon varyab drapo rele 'pa Ranje' yo, vin fo ak chanje li nan vre si ou gen nenpòt eleman swap sou yon sèl iterasyon nan etalaj la. Oswa menm, fè yon kontwa nan konte konbyen echanj ou fè sou nenpòt ki iterasyon bay yo. Nan fen yon iterasyon, si ou pa t 'swap nenpòt nan eleman yo, ou konnen se lis la deja klase epi w ap fè. Triye jarèt, tankou algoritm klasman lòt, yo ka tweaked pou travay pou nenpòt eleman ki gen yon metòd kòmande. Sa se, bay de eleman ou gen yon fason yo di si yon sèl nan premye se pi gran pase, egal a oswa pi piti pase dezyèm lan. Pou egzanp, ou ta ka klase lèt nan alfabè a lè li di ke yon