ബബിൾ സോർട്ട്
ഒരു അടുക്കിലെയോ പട്ടികയിലെയോ സംഖ്യകളെയും മറ്റും ക്രമത്തിലാക്കാൻ ഉപയോഗിക്കുന്ന ഒരു ക്രമീകരണ അൽഗൊരിതമാണ് ബബിൾ ക്രമീകരണം (Bubble Sort) അഥവാ കുമിള ക്രമീകരണം. വിവരിക്കാൻ എളുപ്പമുള്ളതും, സമയസങ്കീർണ്ണത കൂടിയതിനാൽ വളരെ സമയമെടുക്കുന്നതുമായ ഒരു ക്രമീകരണ അൽഗൊരിതമാണിത്. അംഗങ്ങളുള്ള ഇൻപുട്ട് ക്രമപ്പെടുത്താനായിക്കൊണ്ട് ഈ അൽഗൊരിതത്തിന് വേണ്ടുന്ന സമയസങ്കീർണ്ണത ഉം സ്ഥലസങ്കീർണ്ണത ഉമാണ്. ഒരു സ്വസ്ഥല അൽഗൊരിതമാണ് (in-place algorithm) ഇത് എന്നതിനാൽ ഇൻപുട്ടിന് പുറമെ മെമ്മറി മാത്രമേ ഇതിന് ആവശ്യമുള്ളൂ.
സംഖ്യകളുടെ ഒരു ലിസ്റ്റിൽ ബബിൾ സോർട്ട് നടക്കുമ്പോൾ സംഭവിക്കുന്നത്. | |
കുടുംബം | സോർട്ടിങ്ങ് അൽഗൊരിതം |
---|---|
ദത്തസങ്കേതം | അടുക്ക് |
കൂടിയ സമയസങ്കീർണ്ണത | |
കുറഞ്ഞ സമയസങ്കീർണ്ണത | |
ശരാശരി സമയസങ്കീർണ്ണത | |
കൂടിയ സ്ഥലസങ്കീർണ്ണത | ആകെ , ലിസ്റ്റിനു പുറമെ |
Optimal | അല്ല |
ക്രമത്തിലല്ലാത്തവയും അടുത്തടുത്തുള്ളവയുമായ സംഖ്യകളെ പരസ്പരം ആവർത്തിച്ചാവർത്തിച്ച് മാറ്റുന്നതു വഴിയാണ് ബബിൾ ക്രമീകരണം സംഖ്യകളെ ക്രമീകരിക്കുന്നത്. ക്രമീകരിക്കപ്പെട്ട സംഖ്യകൾ കുമിളകളെപ്പോലെ (bubbles) പട്ടികയുടെ ഒരു ഭാഗത്തേക്കു പോകുന്നു എന്നതിനാലാണ് ഈ അൽഗൊരിതത്തിന് പേര് ലഭിച്ചത്. സംഖ്യകളെ താരതമ്യം ചെയ്ത് ക്രമീകരിക്കുന്നതിനാൽ ഇത് ഒരു താരതമ്യ സോർട്ട് ആണ്.
അൽഗൊരിതം
തിരുത്തുകഎന്ന ചിഹ്നത്താൽ കുറിയ്ക്കുന്നതും അംഗങ്ങളുള്ളതുമായ ഒരടുക്ക് ഇൻപുട്ടായി തന്നിട്ടുണ്ടെന്ന് കരുതുക. ഘട്ടങ്ങളായാണ് ബബിൾ ക്രമീകരണ അൽഗൊരിതം പ്രവർത്തിക്കുന്നത്.
ആദ്യഘട്ടത്തിൽ ഇനിപ്പറയുന്ന പ്രക്രിയ ചെയ്യുക. ഉം ഉം താരതമ്യം ചെയ്യുക. ആണെങ്കിൽ ആ രണ്ട് വിലകളെയും അടുക്കിൽ പരസ്പരം സ്ഥാനം മാറ്റുക. കൂടുതൽ വ്യക്തമായിപ്പറഞ്ഞാൽ, ഇൽ ന്റെ വില സൂക്ഷിക്കുകയും ഇൽ ന്റെ വില സൂക്ഷിക്കുകയും ചെയ്യുക. മറിച്ച് ആണെങ്കിൽ അവയെ അവഗണിച്ച് നെയും നെയും മേൽപ്പറഞ്ഞ പ്രക്രിയയ്ക്ക് വിധേയമാക്കുക. ഇപ്രകാരം തവണ ഇതേ പ്രക്രിയ ആവർത്തിച്ചു കഴിഞ്ഞാൽ (അഥവാ ഉം ഉം ഇതേ പ്രക്രിയയ്ക്ക് വിധേയമായിക്കഴിഞ്ഞാൽ), ഒന്നാമത്തെ ഘട്ടം കഴിഞ്ഞു.
രണ്ടാമത്തെ ഘട്ടത്തിൽ മേൽപ്പറഞ്ഞ പ്രക്രിയകൾ തവണയേ ആവർത്തിക്കുന്നുള്ളൂ. അതായത് ഉം ഉം ഈ പ്രക്രിയക്ക് വിധേയമായിക്കഴിയുന്നതു വരെ മാത്രം. ഇപ്രകാരം ആമത്തെ ഘട്ടത്തിൽ മേൽപ്പറഞ്ഞ പ്രക്രിയകൾ തവണ മാത്രം ആവർത്തിക്കുന്നു.
ഇങ്ങനെ ആകെ ഘട്ടങ്ങൾക്കു ശേഷം അടുക്കിലെ അംഗങ്ങളെല്ലാം ക്രമത്തിലാകും.
ഔപചാരിക വിവരണം
തിരുത്തുകഅംഗങ്ങളുള്ള എന്ന അടുക്ക് ബബിൾ ക്രമീകരണം വഴി ക്രമപ്പെടുത്താൻ:
1. അവസാനം 2. കൊടി ശരി 3. (അവസാനം == 1 അഥവാ കൊടി == തെറ്റ്) ആണെങ്കിൽ നിർത്തുക 4. കൊടി തെറ്റ് 5. മുതൽ അവസാനം വരെയുള്ള വിലകൾ ഓരോന്നോരോന്നായി യ്ക്ക് നൽകി പടി 6ഉം 7ഉം ചെയ്യുക 6. ആണെങ്കിൽ അവയെ പരസ്പരം സ്ഥലം മാറ്റുക 7. കൊടി ശരി 8. അവസാനം അവസാനം 9. 3ആം പടിയിലേക്ക് പോകുക
വിശകലനം
തിരുത്തുകസംഖ്യകൾ തികച്ചും വിപരീതക്രമത്തിലാകുമ്പോൾ തവണ പടി 6 ചെയ്യേണ്ടി വരുന്നു എന്നതിനാൽ കുമിളക്രമീകരണത്തിന്റെ കൂടിയ സമയസങ്കീർണ്ണത ആണ്. സംഖ്യകൾ തികച്ചും ക്രമത്തിലാകുമ്പോൾ ഇത് തവണ മാത്രം ചെയ്താൽ മതി എന്നതിനാൽ കുറഞ്ഞ സമയസങ്കീർണ്ണത ആണ്. ശരാശരി സമയസങ്കീർണ്ണത തന്നെ. ശരാശരി, കൂടിയ സമയസങ്കീർണ്ണതകൾ ആയുള്ള ക്രമീകരണ അൽഗൊരിതങ്ങൾ ഉണ്ട്. സമയസങ്കീർണ്ണത ഉള്ള ഇൻസർഷൻ സോർട്ട് മുതലായ അൽഗൊരിതങ്ങളും കുമിളക്രമീകരണത്തെക്കാൾ വേഗത്തിൽ ക്രമീകരണം നടത്തുന്നു എന്നതിനാൽ വലിയ പട്ടികകളോ അടുക്കുകളോ ക്രമപ്പെടുത്താൻ കുമിളക്രമീകരണം ഉപയോഗിക്കാറില്ല.
പുറത്തേക്കുള്ള കണ്ണികൾ
തിരുത്തുകപരിശീലനക്കുറിപ്പുകൾ Algorithm implementation എന്ന താളിൽ ലഭ്യമാണ്
- Bubble Sort in 29 languages Archived 2009-07-05 at the Wayback Machine.
- Animated Sorting Algorithms: Bubble Sort – graphical demonstration and discussion of bubble sort
- Bubble Sort Demo Archived 2009-02-01 at the Wayback Machine.
- Bubble Sort Demonstration
- Lafore's Bubble Sort Archived 2008-01-19 at the Wayback Machine.
- Sorting Applets in C++
- Analyze Bubble Sort in an online Javascript IDE
- A colored graphical Java applet Archived 2008-12-07 at the Wayback Machine. which allows experimentation with initial state and shows statistics
- BubbleSort tutorial, code, and a simple example Archived 2009-03-27 at the Wayback Machine.
- An animated video that explains bubble sort and quick sort and compares their performance.
- A much better visualization of the action of bubble sort.