జావాలో త్వరిత క్రమబద్ధీకరణ వివరించబడింది

Quick Sort Java Explained



క్విక్ సార్ట్, క్విక్సార్ట్ అని కూడా వ్రాయబడుతుంది, ఇది లిస్ట్ సార్టింగ్ స్కీమ్, ఇది డివైడ్-అండ్-కాంక్వెర్ నమూనాను ఉపయోగిస్తుంది. త్వరిత క్రమబద్ధీకరణ కోసం విభిన్న స్కీమ్‌లు ఉన్నాయి, అన్నీ డివైడ్-అండ్-కాంక్వర్ ప్యారడైమ్‌ని ఉపయోగిస్తాయి. త్వరిత క్రమబద్ధీకరణను వివరించే ముందు, జాబితా లేదా ఉప-జాబితా మరియు మూడు విలువల మధ్యస్థాన్ని సగానికి తగ్గించడానికి కన్వెన్షన్‌ని రీడర్ తప్పక తెలుసుకోవాలి.

హల్వింగ్ కన్వెన్షన్

జాబితాలో మూలకాల సంఖ్య సమానంగా ఉన్నప్పుడు, జాబితాను సగానికి తగ్గించడం అంటే లిస్ట్‌లో అక్షర ప్రథమార్థం ప్రథమార్థం, మరియు అక్షరాలా రెండవ భాగం రెండవ సగం. మొత్తం జాబితాలోని మధ్య (మధ్య) మూలకం, మొదటి జాబితాలోని చివరి అంశం. దీని అర్థం మధ్య సూచిక పొడవు / 2 - 1, ఇండెక్స్ లెక్కింపు సున్నా నుండి ప్రారంభమవుతుంది. పొడవు అనేది జాబితాలోని అంశాల సంఖ్య. ఉదాహరణకు, మూలకాల సంఖ్య 8 అయితే, జాబితాలోని మొదటి సగం 4 మూలకాలను కలిగి ఉంటుంది మరియు రెండవ సగం కూడా 4 అంశాలను కలిగి ఉంటుంది. అది మంచిది. ఇండెక్స్ కౌంటింగ్ 0 నుండి మొదలవుతుంది కాబట్టి, మధ్య ఇండెక్స్ 3 = 8 /2 - 1.







జాబితా లేదా ఉప-జాబితాలోని మూలకాల సంఖ్య బేసిగా ఉన్నప్పుడు కేసు గురించి ఏమిటి? ప్రారంభంలో, పొడవు ఇంకా 2 ద్వారా విభజించబడింది. కన్వెన్షన్ ద్వారా, ఈ డివిజన్ యొక్క మొదటి భాగంలో మూలకాల సంఖ్య పొడవు / 2 + 1/2. సూచిక లెక్కింపు సున్నా నుండి ప్రారంభమవుతుంది. మధ్య సూచిక పొడవు / 2 - 1/2 ద్వారా ఇవ్వబడుతుంది. ఇది సమావేశం ద్వారా మధ్య కాలంగా పరిగణించబడుతుంది. ఉదాహరణకు, జాబితాలోని మూలకాల సంఖ్య 5 అయితే, మధ్య సూచిక 2 = 5/2 - 1/2. మరియు, జాబితా మొదటి భాగంలో మూడు అంశాలు మరియు రెండవ భాగంలో రెండు అంశాలు ఉన్నాయి. మొత్తం జాబితా యొక్క మధ్య మూలకం ఇండెక్స్, 2 లో మూడవ మూలకం, ఇది మధ్య ఇండెక్స్ ఎందుకంటే ఇండెక్స్ కౌంటింగ్ 0 నుండి ప్రారంభమవుతుంది.



ఈ విధంగా విభజన అనేది పూర్ణాంక అంకగణితానికి ఉదాహరణ.



మూడు విలువల మధ్యస్థం

ప్రశ్న: క్రమం యొక్క మధ్యస్థం ఏమిటి:





సి బి ఎ

పరిష్కారం:
ఆరోహణ క్రమంలో జాబితాను అమర్చండి:



ఎ బి సి

మధ్య పదం, B, మధ్యస్థం. ఇది ఇతర రెండు పరిమాణాల మధ్య ఉండే పరిమాణం.

జాబితాలో మధ్యస్థం కోసం వెతకడం అలాంటిది కాదు. ఉదాహరణకు, క్రమబద్ధీకరించని 19 మూలకాల జాబితాలో, మొదటి మూలకం, మధ్య మూలకం మరియు చివరి మూలకం కోసం మధ్యస్థం అవసరం కావచ్చు. ఈ మూడు విలువలు ఆరోహణ క్రమంలో ఉండకపోవచ్చు; కాబట్టి, వాటి సూచికలను పరిగణనలోకి తీసుకోవాలి.

త్వరిత క్రమబద్ధీకరణతో, మొత్తం జాబితా మరియు ఉప-జాబితాలకు మధ్యస్థం అవసరం. జాబితాలో (శ్రేణి) ఖాళీగా ఉన్న మూడు విలువల మధ్యస్థం కోసం చూసే సూడోకోడ్:

మధ్య: =.(తక్కువ+అధిక) / 2.
ఉంటేఅరె[మధ్య] <అరె[తక్కువ]
స్వాప్ అర[తక్కువ]అరతో[మధ్య]
ఉంటేఅరె[అధిక] <అరె[తక్కువ]
స్వాప్ అర[తక్కువ]అరతో[అధిక]
ఉంటేఅరె[మధ్య] <అరె[అధిక]
స్వాప్ అర[మధ్య]అరతో[అధిక]
ఇరుసు: =అరె[అధిక]

అర్ అనే పదానికి అర్రే అని అర్థం. ఈ కోడ్ సెగ్మెంట్ మధ్యస్థం కోసం చూస్తుంది మరియు కొంత సార్టింగ్ కూడా చేస్తుంది. ఈ కోడ్ విభాగం సరళంగా కనిపిస్తుంది, కానీ ఇది చాలా గందరగోళంగా ఉంటుంది. కాబట్టి, ఈ క్రింది వివరణకు శ్రద్ధ వహించండి:

ఈ ట్యుటోరియల్‌లోని సార్టింగ్‌లో మొదటి విలువ అతి చిన్న విలువ, మరియు చివరి విలువ అతిపెద్ద విలువ అయిన జాబితాను ఉత్పత్తి చేస్తుంది. వర్ణమాలతో, A అనేది Z కంటే తక్కువగా ఉంటుంది.

ఇక్కడ, ఇరుసు ఫలిత మాధ్యమం. తక్కువ అనేది జాబితా లేదా ఉప-జాబితా యొక్క అత్యల్ప సూచిక (అత్యల్ప విలువ కోసం తప్పనిసరి కాదు); లిస్ట్ లేదా సబ్-లిస్ట్ యొక్క అత్యధిక ఇండెక్స్ (అత్యధిక విలువకు తప్పనిసరి కాదు), మరియు మధ్య సాంప్రదాయ మిడిల్ ఇండెక్స్ (మొత్తం లిస్ట్ యొక్క మిడిల్ వాల్యూ కోసం తప్పనిసరి కాదు).

కాబట్టి, పొందవలసిన మధ్యస్థం అత్యల్ప సూచిక విలువ, మధ్య సూచిక విలువ మరియు అత్యధిక సూచిక విలువ మధ్య ఉంటుంది.

కోడ్‌లో, సంప్రదాయ మధ్య సూచిక మొదట పొందబడుతుంది. ఈ ప్రారంభంలో, జాబితా క్రమబద్ధీకరించబడలేదు. మూడు విలువల ఆరోహణ క్రమంలో పోలిక మరియు కొంత పునర్వ్యవస్థీకరణ ఒకే సమయంలో జరగాలి. మొదటి if- స్టేట్‌మెంట్ అత్యల్ప ఇండెక్స్ మరియు మధ్య ఇండెక్స్ విలువను పోల్చి చూస్తుంది. మిడిల్ ఇండెక్స్ తక్కువ ఇండెక్స్ కంటే తక్కువగా ఉంటే, రెండు విలువలు స్థానాలను మార్చుకుంటాయి. ఇది క్రమబద్ధీకరించడం ప్రారంభిస్తుంది మరియు జాబితా లేదా ఉప-జాబితాలోని విలువల అమరికను మారుస్తుంది. రెండవ if- స్టేట్మెంట్ అత్యధిక ఇండెక్స్ మరియు అత్యల్ప ఇండెక్స్ విలువను పోల్చి చూస్తుంది. అత్యధిక ఇండెక్స్ తక్కువ ఇండెక్స్ కంటే తక్కువగా ఉంటే, రెండు విలువలు స్థానాలను మార్చుకుంటాయి. ఇది జాబితా లేదా ఉప-జాబితాలోని విలువల అమరికలో కొంత క్రమబద్ధీకరణ మరియు మార్పును కలిగి ఉంటుంది. మూడవ if- స్టేట్‌మెంట్ మధ్య ఇండెక్స్ మరియు అత్యధిక ఇండెక్స్ విలువను పోల్చి చూస్తుంది. అత్యధిక ఇండెక్స్ మధ్య ఇండెక్స్ కంటే తక్కువగా ఉంటే, రెండు విలువలు స్థానాలను మార్చుకుంటాయి. కొంత క్రమబద్ధీకరణ లేదా పునర్వ్యవస్థీకరణ కూడా ఇక్కడ సంభవించవచ్చు. ఈ మూడవ ఇఫ్-కండిషన్ మునుపటి రెండు లాగా లేదు.

ఈ మూడు మార్పిడిల ముగింపులో, ప్రశ్నలోని మూడు విలువలకు మధ్య విలువ A [అధిక] గా ఉంటుంది, దీని అసలు కంటెంట్ కోడ్ విభాగంలో మార్చబడి ఉండవచ్చు. ఉదాహరణకు, క్రమబద్ధీకరించని క్రమాన్ని పరిగణించండి:

సి బి ఎ

మధ్యస్థం B. అని మాకు ఇప్పటికే తెలుసు. అయితే, ఇది నిరూపించబడాలి. పైన ఉన్న కోడ్ విభాగాన్ని ఉపయోగించి ఈ మూడు విలువల మధ్యస్థాన్ని పొందడం ఇక్కడ లక్ష్యం. మొదటి if- స్టేట్‌మెంట్ B మరియు C. ని పోల్చి చూస్తే B C కంటే తక్కువగా ఉంటే, B మరియు C స్థానాలను తప్పనిసరిగా మార్చుకోవాలి. B C కంటే తక్కువ, కాబట్టి కొత్త అమరిక అవుతుంది:

బి సి ఎ

గమనించండి, అత్యల్ప సూచిక మరియు మధ్య సూచిక విలువలు మారాయి. రెండవ ఐ-స్టేట్మెంట్ A మరియు B. ని పోల్చి చూస్తే A B కంటే తక్కువగా ఉంటే, A మరియు B స్థానాలను మార్చుకోవాలి. A B కంటే తక్కువ, కాబట్టి కొత్త అమరిక అవుతుంది:

ఎ సి బి

గమనించండి, అత్యధిక సూచిక మరియు అత్యల్ప సూచిక విలువలు మారాయి. మూడవ if- స్టేట్మెంట్ C మరియు B. ని పోల్చి చూస్తే C B కంటే తక్కువగా ఉంటే, C మరియు B స్థానాలను మార్చుకోవాలి. C B కంటే తక్కువ కాదు, కాబట్టి మార్పిడి జరగదు. కొత్త అమరిక మునుపటిలాగే ఉంది, అంటే:

ఎ సి బి

B అనేది మధ్యస్థం, అంటే A [అధికం], మరియు ఇది ఇరుసు. కాబట్టి, పైవట్ జాబితా లేదా ఉప-జాబితా యొక్క చివరి చివరలో జన్మించింది.

మార్పిడి ఫంక్షన్

త్వరిత క్రమబద్ధీకరణకు అవసరమైన మరొక లక్షణం మార్పిడి ఫంక్షన్. మార్పిడి ఫంక్షన్, రెండు వేరియబుల్స్ విలువలను మార్పిడి చేస్తుంది. మార్పిడి ఫంక్షన్ కోసం సూడోకోడ్:

మార్పిడిని నిర్వచించండి(x,మరియు)
తాత్కాలిక: =x
x: =మరియు
మరియు: =తాత్కాలిక

ఇక్కడ, x మరియు y వాస్తవ విలువలను సూచిస్తాయి మరియు కాపీలను కాదు.

ఈ ఆర్టికల్‌లోని సార్టింగ్ జాబితాను ఉత్పత్తి చేస్తుంది, ఇక్కడ మొదటి విలువ చిన్న విలువ, మరియు చివరి విలువ అతిపెద్ద విలువ.

వ్యాసం కంటెంట్

త్వరిత క్రమబద్ధీకరణ అల్గోరిథం

క్రమబద్ధీకరించని జాబితాను క్రమబద్ధీకరించడానికి సాధారణ మార్గం మొదటి రెండు విలువలను పరిగణనలోకి తీసుకోవడం. అవి సక్రమంగా లేకపోతే, వాటిని క్రమబద్ధీకరించండి. తరువాత, మొదటి మూడు విలువలను పరిగణించండి. మూడవ విలువ ఎక్కడ సరిపోతుందో చూడటానికి మొదటి రెండింటిని స్కాన్ చేయండి మరియు దానికి తగినట్లుగా సరిపోతుంది. అప్పుడు, మొదటి నాలుగు విలువలను పరిగణించండి. నాల్గవ విలువ ఎక్కడ సరిపోతుందో చూడడానికి మొదటి మూడు విలువలను స్కాన్ చేయండి మరియు దానికి తగినట్లుగా సరిపోతుంది. మొత్తం జాబితా క్రమబద్ధీకరించబడే వరకు ఈ విధానాన్ని కొనసాగించండి.

కంప్యూటర్ ప్రోగ్రామింగ్ పరిభాషలో బ్రూట్-ఫోర్స్ సార్ట్‌గా కూడా పిలువబడే ఈ విధానం చాలా నెమ్మదిగా ఉంటుంది. త్వరిత క్రమబద్ధీకరణ అల్గోరిథం చాలా వేగవంతమైన ప్రక్రియతో వస్తుంది.

క్విక్సార్ట్ అల్గోరిథం కోసం దశలు క్రింది విధంగా ఉన్నాయి:

  1. క్రమబద్ధీకరించని జాబితాలో క్రమబద్ధీకరించడానికి కనీసం 2 సంఖ్యలు ఉన్నాయని నిర్ధారించుకోండి.
  2. పివోట్ అని పిలువబడే జాబితా కోసం అంచనా వేసిన కేంద్ర విలువను పొందండి. మధ్యస్థం, పైన వివరించిన విధంగా, ఇరుసు పొందడానికి ఒక మార్గం. వారి ప్రయోజనాలు మరియు అప్రయోజనాలతో విభిన్న మార్గాలు వస్తాయి. - తరువాత చూడండి.
  3. జాబితాను విభజించండి. దీని అర్థం, జాబితాలో పివట్ ఉంచండి. ఈ విధంగా, ఎడమ వైపున ఉన్న అన్ని మూలకాలు పివోట్ విలువ కంటే తక్కువగా ఉంటాయి మరియు కుడి వైపున ఉన్న అన్ని మూలకాలు పివోట్ విలువ కంటే ఎక్కువ లేదా సమానంగా ఉంటాయి. విభజనకు వివిధ మార్గాలు ఉన్నాయి. ప్రతి విభజన పద్ధతి దాని ప్రయోజనాలు మరియు అప్రయోజనాలతో వస్తుంది. విభజన అనేది విభజన మరియు జయించే నమూనాలో విభజించడం.
  4. మొత్తం జాబితా క్రమబద్ధీకరించబడే వరకు ఉద్భవించే కొత్త ఉప-జాబితా జతలకు 1, 2 మరియు 3 దశలను పునరావృతం చేయండి. ఇది విభజించు మరియు జయించు నమూనాలో జయించుట.

త్వరిత క్రమబద్ధీకరణ సూడోకోడ్:

అల్గోరిథం క్విక్సార్ట్(అరె,తక్కువ,అధిక)ఉంది
ఉంటేతక్కువ<అప్పుడు అధిక
ఇరుసు(తక్కువ,అధిక)
p: =విభజన(అరె,తక్కువ,అధిక)
క్విక్సార్ట్(అరె,తక్కువ,p- 1)
క్విక్సార్ట్(అరె,p+ 1,అధిక)

విభజన సూడోకోడ్

ఈ ట్యుటోరియల్‌లో ఉపయోగించిన విభజన సూడోకోడ్:

అల్గోరిథం విభజన(అరె,తక్కువ,అధిక)ఉంది
ఇరుసు: =అరె[అధిక]
i: =తక్కువ
: =అధిక
చేయండి
చేయండి
++i
అయితే(అరె[i] <ఇరుసు)
చేయండి
-
అయితే(అరె[] >ఇరుసు)
ఉంటే (i<)
స్వాప్ అర[i]అరతో[]
అయితే(i<)
స్వాప్ అర[i]అరతో[అధిక]
తిరిగిi

దిగువ త్వరిత క్రమబద్ధీకరణ యొక్క దృష్టాంతంలో, ఈ కోడ్ ఉపయోగించబడుతుంది:

త్వరిత క్రమబద్ధీకరణ యొక్క ఉదాహరణ

అక్షర అక్షరాల కింది క్రమబద్ధీకరించని జాబితాను (శ్రేణి) పరిగణించండి:

Q W E R T Y U I O P

తనిఖీ ద్వారా, క్రమబద్ధీకరించబడిన జాబితా:

E I O P Q R T U W Y

క్రమబద్ధీకరించబడని జాబితా నుండి పై అల్గోరిథం మరియు సూడోకోడ్ విభాగాలను ఉపయోగించి క్రమబద్ధీకరించబడిన జాబితా ఇప్పుడు నిరూపించబడుతుంది:

Q W E R T Y U I O P

మొదటి ఇరుసు arr [0] = Q, arr [4] = T, మరియు arr [9] = P నుండి నిర్ణయించబడుతుంది, మరియు Q గా గుర్తించబడింది మరియు జాబితా యొక్క కుడి వైపున ఉంచబడుతుంది. కాబట్టి, ఏదైనా పివోట్ ఫంక్షన్ సార్టింగ్‌తో జాబితా అవుతుంది:

P W E R T Y U I O Q

ప్రస్తుత ఇరుసు Q. పివోట్ విధానం కొన్ని చిన్న సార్టింగ్ చేసి P ని మొదటి స్థానంలో ఉంచింది. ఫలిత జాబితాను పునర్వ్యవస్థీకరించాలి (విభజించబడింది), అంటే, ఎడమ వైపున ఉన్న అన్ని మూలకాలు విలువలో చిన్నవిగా ఉంటాయి, అప్పుడు ఇరుసు మరియు ఇరుసు యొక్క కుడి వైపున ఉన్న అన్ని మూలకాలు పివోట్ కంటే సమానంగా లేదా ఎక్కువ. తనిఖీ ద్వారా కంప్యూటర్ విభజన చేయలేము. కాబట్టి, ఇది సూచికలు మరియు పైన విభజన అల్గోరిథం ఉపయోగించి చేస్తుంది.

ఇప్పుడు తక్కువ మరియు అధిక సూచికలు 0 మరియు 9. కాబట్టి, కంప్యూటర్ ఇండెక్స్ 0 నుండి స్కాన్ చేయడం ద్వారా ఇండెక్స్‌కు చేరుకునే వరకు ప్రారంభమవుతుంది, దీని విలువ ఇరుసు కంటే సమానం లేదా ఎక్కువ మరియు తాత్కాలికంగా ఆగిపోతుంది. ఇది అధిక (కుడి) చివర నుండి, సూచిక 9 నుండి క్రిందికి స్కాన్ చేస్తుంది, ఇది సూచికకు చేరుకునే వరకు, దాని విలువ పివోట్ కంటే తక్కువగా లేదా సమానంగా ఉంటుంది మరియు తాత్కాలికంగా అక్కడ ఆగిపోతుంది. దీని అర్థం స్టాప్ యొక్క రెండు స్థానాలు. నేను, ఇంక్రిమెంటల్ ఇండెక్స్ వేరియబుల్, తక్కువ నుండి ఇంకా సమానంగా లేదా తగ్గుతున్న ఇండెక్స్ వేరియబుల్ కంటే ఎక్కువగా ఉంటే, j అధిక నుండి j, అప్పుడు ఈ రెండు విలువలు మార్చుకోబడతాయి. ప్రస్తుత పరిస్థితిలో, రెండు చివర్ల నుండి స్కానింగ్ W మరియు O వద్ద ఆగిపోయింది. కాబట్టి జాబితా అవుతుంది:

P O E R T Y U I W Q

ఇరుసు ఇప్పటికీ Q. వ్యతిరేక దిశలలో స్కానింగ్ కొనసాగుతుంది మరియు తదనుగుణంగా ఆగిపోతుంది. నేను ఇంకా j కి సమానం లేదా ఎక్కువ కాకపోతే, రెండు చివరల నుండి స్కానింగ్ నిలిపివేయబడిన రెండు విలువలు మార్చుకోబడతాయి. ఈసారి, రెండు చివర్ల నుండి స్కానింగ్ R మరియు I వద్ద ఆగిపోయింది. కాబట్టి, జాబితా అమరిక అవుతుంది:

P O E I T Y U R W Q

ఇరుసు ఇప్పటికీ Q. వ్యతిరేక దిశలలో స్కానింగ్ కొనసాగుతుంది మరియు తదనుగుణంగా ఆగిపోతుంది. నేను ఇంకా j కి సమానం లేదా ఎక్కువ కాకపోతే, స్కానింగ్ ఆగిపోయిన రెండు విలువలు మార్చుకోబడతాయి. ఈసారి, రెండు చివర్ల నుండి స్కానింగ్ I కోసం T మరియు i కోసం నిలిపివేయబడింది. i మరియు j కలుసుకున్నారు లేదా దాటారు. కాబట్టి, మార్పిడి ఉండదు. జాబితా ఇలాగే ఉంటుంది:

P O E I T Y U R W Q

ఈ సమయంలో, పివోట్, Q, క్రమబద్ధీకరణలో దాని తుది స్థానంలో ఉంచాలి. ఇది arr [i] ని arr [high] తో మార్చుకోవడం, T మరియు Q ని మార్చుకోవడం ద్వారా జరుగుతుంది. జాబితా అవుతుంది:

P O E I Q Y U R W T

ఈ సమయంలో, మొత్తం జాబితా కోసం విభజన ముగిసింది. పివట్ = Q దాని పాత్రను పోషించింది. ఇప్పుడు మూడు ఉప-జాబితాలు ఉన్నాయి, అవి:

P O E I Q Y U R W T

విభజన అనేది నమూనాలో విభజన మరియు జయించడం (సార్టింగ్). Q దాని సరైన సార్టింగ్ పొజిషన్‌లో ఉంది. Q కి ఎడమవైపు ఉన్న ప్రతి మూలకం Q కంటే చిన్నది, మరియు Q యొక్క ప్రతి మూలకం Q కంటే పెద్దది. అయితే, ఎడమ జాబితా ఇంకా క్రమబద్ధీకరించబడలేదు; మరియు సరైన జాబితా ఇంకా క్రమబద్ధీకరించబడలేదు. ఎడమ ఉప-జాబితా మరియు కుడి ఉప-జాబితాను క్రమబద్ధీకరించడానికి మొత్తం త్వరిత క్రమం ఫంక్షన్‌ను పునరావృతంగా పిలవాలి. త్వరిత క్రమబద్ధీకరణను ఈ రీకాల్ చేయడం కొనసాగించాలి; మొత్తం అసలైన జాబితా పూర్తిగా క్రమబద్ధీకరించబడే వరకు కొత్త ఉప-జాబితాలు అభివృద్ధి చెందుతాయి. క్విక్ సార్ట్ ఫంక్షన్ యొక్క ప్రతి రీకాలింగ్ కోసం, సంబంధిత సబ్ సబ్ లిస్ట్‌కు హాజరయ్యే ముందు ముందుగా ఎడమ సబ్-లిస్ట్‌కు అటెండ్ చేయబడుతుంది. ప్రతి ఉప-జాబితా కోసం ఒక కొత్త ఇరుసు పొందాలి.

ఉప జాబితా కోసం:

పి ఓ ఇ ఐ

P, O మరియు I కోసం ఇరుసు (మధ్యస్థం) నిర్ణయించబడుతుంది. పివోట్ O. 4-1] = అర [3], ఇక్కడ నేను మునుపటి విభజన నుండి తుది పివోట్ ఇండెక్స్. పివోట్ () ఫంక్షన్ అని పిలవబడిన తర్వాత, కొత్త పివోట్ విలువ, పివోట్ = O. పివోట్ ఫంక్షన్ మరియు పివోట్ విలువ మధ్య కంగారు పడకండి. పివోట్ ఫంక్షన్ కొన్ని చిన్న సార్టింగ్ చేయవచ్చు మరియు ఉప-జాబితా యొక్క కుడి వైపున ఇరుసును ఉంచవచ్చు. ఈ ఉప జాబితా అవుతుంది,

నేను పి ఇ ఓ

ఈ పథకంతో, పివోట్ ఎల్లప్పుడూ ఉప-జాబితా లేదా దాని ఫంక్షన్ కాల్ తర్వాత జాబితా యొక్క కుడి చివరలో ముగుస్తుంది. రెండు చివర్ల నుండి స్కానింగ్ అనేది అర్ర్ [0] మరియు అర్ర్ [3] నుండి i మరియు j కలిసే వరకు లేదా క్రాస్ అయ్యే వరకు ప్రారంభమవుతుంది. పోలిక pivot = O తో చేయబడుతుంది. మొదటి స్టాప్‌లు P మరియు E వద్ద ఉంటాయి. అవి మార్చుకోబడ్డాయి మరియు కొత్త ఉప-జాబితా అవుతుంది:

నేను ఇ పి ఓ

రెండు చివర్ల నుండి స్కానింగ్ కొనసాగుతుంది, మరియు కొత్త స్టాప్‌లు I కోసం P మరియు j కొరకు E వద్ద ఉంటాయి. ఇప్పుడు i మరియు j కలుసుకున్నారు లేదా దాటారు. కాబట్టి ఉప జాబితా ఇలాగే ఉంటుంది:

నేను ఇ పి ఓ

పివోట్ తుది స్థానంలో ఉంచబడినప్పుడు ఉప-జాబితా లేదా జాబితా విభజన ముగుస్తుంది. కాబట్టి, arr [i] మరియు arr [high] కోసం కొత్త విలువలు మార్చుకోబడ్డాయి. అంటే, P మరియు O మార్పిడి చేయబడ్డాయి. కొత్త ఉప జాబితా అవుతుంది:

I E O P

మొత్తం జాబితా కోసం O ఇప్పుడు తుది స్థానంలో ఉంది. ఇరుసుగా దాని పాత్ర ముగిసింది. ఉప జాబితా ప్రస్తుతం మరో మూడు జాబితాలుగా విభజించబడింది, అవి:

I E O P

ఈ సమయంలో, మొదటి కుడి ఉప-జాబితా యొక్క త్వరిత క్రమం అని పిలవాలి. అయితే, ఇది పిలువబడదు. బదులుగా, ఇది గమనించబడుతుంది మరియు రిజర్వ్ చేయబడుతుంది, తర్వాత పిలవబడుతుంది. విభజన ఫంక్షన్ యొక్క స్టేట్‌మెంట్‌లు అమలు చేయబడుతున్నందున, ఫంక్షన్ ఎగువ నుండి, ఇది ఇప్పుడు (పివోట్ () పిలవబడిన తర్వాత) తప్పక పిలవబడే ఎడమ ఉప-జాబితా కోసం త్వరిత క్రమబద్ధీకరణ. ఇది జాబితా కోసం పిలువబడుతుంది:

నేను ఇ

ఇది I మరియు E మధ్యస్థాన్ని వెతకడం ద్వారా ప్రారంభమవుతుంది. ఇక్కడ, arr [low] = I, arr [mid] = I మరియు arr [high] = E. కాబట్టి మధ్యస్థ, ఇరుసు, పివట్ అల్గోరిథం ద్వారా నిర్ణయించబడాలి , I. అయితే, పై పివోట్ సూడోకోడ్ పివోట్‌ను E గా నిర్ణయిస్తుంది. పైన పేర్కొన్న సూడోకోడ్ రెండు అంశాలకు కాదు, రెండు అంశాలకు ఉద్దేశించబడింది. దిగువ అమలులో, కోడ్‌కు కొంత సర్దుబాటు ఉంది. ఉప జాబితా అవుతుంది,

ఇ నేను

పివోట్ ఎల్లప్పుడూ ఉప-జాబితా లేదా దాని ఫంక్షన్ కాల్ తర్వాత జాబితా యొక్క కుడి చివరలో ముగుస్తుంది. రెండు చివర్ల నుండి స్కానింగ్ అనేది arr [0] మరియు arr [1] నుండి ప్రత్యేకంగా i మరియు j కలిసే వరకు లేదా క్రాస్ అయ్యే వరకు ప్రారంభమవుతుంది. పోలిక pivot = I తో చేయబడుతుంది. మొదటి మరియు ఏకైక స్టాప్‌లు I మరియు E: I కోసం I వద్ద మరియు j కోసం E వద్ద ఉంటాయి. ఇప్పుడు i మరియు j కలుసుకున్నారు లేదా దాటారు. కాబట్టి, ఉప జాబితా ఇలాగే ఉంటుంది:

ఇ నేను

పివోట్ తుది స్థానంలో ఉంచబడినప్పుడు ఉప-జాబితా లేదా జాబితా విభజన ముగుస్తుంది. కాబట్టి, arr [i] మరియు arr [high] కోసం కొత్త విలువలు మార్చుకోబడ్డాయి. ఇది ఇక్కడ జరుగుతుంది: కొత్త ఉప జాబితా అవుతుంది:

ఇ నేను

మొత్తం జాబితా కోసం నేను ఇప్పుడు తుది స్థానంలో ఉన్నాను. ఇరుసుగా దాని పాత్ర ముగిసింది. ఉప జాబితా ఇప్పుడు మరో రెండు జాబితాలుగా విభజించబడింది, అవి,

ఇ నేను

ఇప్పుడు, ఇప్పటివరకు కీలకమైనవి Q, O మరియు I. పివోట్‌లు తమ తుది స్థానాల్లో ముగుస్తాయి. పై P వంటి ఒకే మూలకం యొక్క ఉప-జాబితా కూడా దాని తుది స్థానంలో ముగుస్తుంది.

ఈ సమయంలో, మొదటి ఎడమ ఉప-జాబితా పూర్తిగా క్రమబద్ధీకరించబడింది. మరియు క్రమబద్ధీకరణ విధానం ఇప్పుడు ఇక్కడ ఉంది:

E I O P Q Y U R W T

మొదటి కుడి ఉప జాబితా:

Y U R W T

ఇంకా క్రమబద్ధీకరించాలి.

మొదటి హక్కు ఉప-జాబితాను జయించడం
మొదటి కుడి ఉప జాబితా కోసం త్వరిత క్రమబద్ధీకరణ కాల్ గుర్తించబడింది మరియు అమలు చేయడానికి బదులుగా రిజర్వ్ చేయబడిందని గుర్తుంచుకోండి. ఈ సమయంలో, అది అమలు చేయబడుతుంది. కాబట్టి, కొత్త అర మొదటి ఎడమ ఉప జాబితా కోసం ఇదే విధమైన కార్యకలాపాలు ఇక్కడ జరుగుతాయి. మరియు ఈ మొదటి కుడి ఉప జాబితా క్రమబద్ధీకరించబడింది:

ఆర్ టి యు డబ్ల్యు

మరియు అసలైన క్రమబద్ధీకరించని జాబితా క్రమబద్ధీకరించబడింది:

E I O P Q R T U W Y

జావా కోడింగ్

జావాలో అల్గోరిథం ఉంచడం అనేది కేవలం పైన పేర్కొన్న సూడోకోడ్ విభాగాలను జావా పద్ధతుల్లోకి ఒక తరగతిలో ఉంచడం. తరగతిలో క్రమబద్ధీకరించని శ్రేణితో క్విక్సార్ట్ () ఫంక్షన్ అని పిలవబడే ఒక ప్రధాన () పద్ధతి ఉండాలి అని మర్చిపోవద్దు.

ఇరుసు () పద్ధతి

విలువ, పివోట్‌ను అందించే జావా పివోట్ () పద్ధతి ఇలా ఉండాలి:

శూన్యంఇరుసు(చార్అరె[], intతక్కువ, intఅధిక) {
intమధ్య= (తక్కువ+అధిక) / 2;
ఉంటే (అరె[మధ్య] <అరె[తక్కువ])
మార్పిడి(అరె,తక్కువ,మధ్య);
ఉంటే (అరె[అధిక] <అరె[తక్కువ])
మార్పిడి(అరె,తక్కువ,అధిక);
ఉంటే ((అధిక-తక్కువ) > 2) {
ఉంటే (అరె[మధ్య] <అరె[అధిక])
మార్పిడి(అరె,మధ్య,అధిక);
}
}

మార్పిడి () పద్ధతి

స్వాప్ () పద్ధతి ఇలా ఉండాలి:

శూన్యంమార్పిడి(చార్అరె[], intx, intమరియు) {
చార్తాత్కాలిక=అరె[x];
అరె[x] =అరె[మరియు];
అరె[మరియు] =తాత్కాలిక;
}

క్విక్సార్ట్ () పద్ధతి

క్విక్సార్ట్ () పద్ధతి ఇలా ఉండాలి:

శూన్యంక్విక్సార్ట్(చార్అరె[], intతక్కువ, intఅధిక) {
ఉంటే (తక్కువ<అధిక) {
ఇరుసు(అరె,తక్కువ,అధిక);
intp=విభజన(అరె,తక్కువ,అధిక);
క్విక్సార్ట్(అరె,తక్కువ,p- 1);
క్విక్సార్ట్(అరె,p+ 1,అధిక);
}
}

విభజన () పద్ధతి

విభజన () పద్ధతి ఇలా ఉండాలి:

intవిభజన(చార్అరె[], intతక్కువ, intఅధిక) {
చార్ఇరుసు=అరె[అధిక];
inti=తక్కువ;
int=అధిక;
చేయండి {
చేయండి
++i;
అయితే(అరె[i] <ఇరుసు);
చేయండి
-;
అయితే(అరె[] >ఇరుసు);
ఉంటే (i<)
మార్పిడి(అరె,i,);
}అయితే(i<);
మార్పిడి(అరె,i,అధిక);
తిరిగిi;
}

ప్రధాన () పద్ధతి

ప్రధాన () పద్ధతి కావచ్చు:

ప్రజాస్టాటిక్ శూన్యంప్రధాన(స్ట్రింగ్[]వాదిస్తుంది) {
చార్అరె[] = {'Q', 'IN', 'మరియు', 'ఆర్', 'T', 'మరియు', 'యు', 'నేను', 'లేదా', 'పి'};
క్లాస్ క్విక్ సార్ట్= కొత్తతరగతి();
QuickSort.క్విక్సార్ట్(అరె, 0, 9);
వ్యవస్థబయటకు.println('ది సార్టెడ్ ఎలిమెంట్స్:');
కోసం(inti=0;i<10;i++) {
వ్యవస్థబయటకు.ముద్రణ(అరె[i]);వ్యవస్థబయటకు.ముద్రణ('');
}
వ్యవస్థబయటకు.println();
}

పైన పేర్కొన్న అన్ని పద్ధతులను ఒక తరగతికి చేర్చవచ్చు.

ముగింపు

క్విక్ సార్ట్ అనేది సార్టింగ్ అల్గోరిథం, ఇది డివైడ్-అండ్-కాంక్వెర్ నమూనాను ఉపయోగిస్తుంది. ఇది క్రమబద్ధీకరించని జాబితాను రెండు లేదా మూడు ఉప-జాబితాలుగా విభజించడం ద్వారా ప్రారంభమవుతుంది. ఈ ట్యుటోరియల్‌లో, త్వరిత క్రమబద్ధీకరణ జాబితాను మూడు ఉప-జాబితాలుగా విభజించింది: ఎడమ ఉప జాబితా, ఒకే మూలకం మధ్య జాబితా మరియు కుడి ఉప జాబితా. క్విక్ సార్ట్‌లో జయించడం అనేది జాబితా లేదా సబ్-లిస్ట్‌ను క్రమబద్ధీకరించేటప్పుడు విభజన విలువను ఉపయోగించి విభజించడం. ఈ ట్యుటోరియల్ జావా కంప్యూటర్ భాషలో త్వరిత క్రమబద్ధీకరణ యొక్క ఒక అమలును వివరించింది.

రచయిత గురుంచి

క్రిసాంథస్ ఫోర్చా

మొదటి సూత్రాలు మరియు సంబంధిత శ్రేణుల నుండి గణిత ఇంటిగ్రేషన్ యొక్క ఆవిష్కర్త. ఎలక్ట్రానిక్స్ మరియు కంప్యూటర్ సాఫ్ట్‌వేర్‌లో ప్రత్యేకత కలిగిన సాంకేతిక విద్యలో మాస్టర్స్ డిగ్రీ. BSc ఎలక్ట్రానిక్స్. కంప్యూటింగ్ మరియు టెలికమ్యూనికేషన్స్‌లో మాస్టర్స్ స్థాయిలో నాకు జ్ఞానం మరియు అనుభవం కూడా ఉంది. 20,000 మంది రచయితలలో, devarticles.com లో నేను 37 వ ఉత్తమ రచయిత. నేను 10 సంవత్సరాలకు పైగా ఈ రంగాలలో పని చేస్తున్నాను.

అన్ని పోస్ట్‌లను వీక్షించండి

సంబంధిత లినక్స్ హింట్ పోస్ట్‌లు