चयन क्रम (Selection Sort) एक छंटाई एल्गोरिदम है जो ऐरे से सबसे छोटी संख्या ढूंढकर उसे पहली स्थिति में रखकर काम करता है। अगला ऐरे जिसे पार किया जाना है वह उस स्थिति के बगल के इंडेक्स से शुरू होगा जहां सबसे छोटी संख्या रखी गई है।
आइए इस अवधारणा को और स्पष्ट करने के लिए एक उदाहरण लें।
हमारे पास एक ऐरे {6, 3, 8, 12, 9} है जिसमें सबसे छोटा एलिमेंट 3 है। तो हम 3 को पहली स्थिति में रखेंगे, इसके बाद ऐरे {3, 6, 8, 12, 9} जैसा दिखेगा। अब हम फिर से सबसे छोटी संख्या ढूंढेंगे लेकिन इस बार हम अपनी खोज में 3 पर विचार नहीं करेंगे क्योंकि यह अपनी जगह पर है। अगला सबसे छोटा एलिमेंट 6 ढूंढकर, 6 को दूसरी स्थिति पर रखकर ऐरे बनाना और फिर ऐरे में तब तक खोज करना जब तक ऐरे क्रमबद्ध न हो जाए।
चयन क्रम एल्गोरिदम का कार्य -
चयन क्रम एल्गोरिदम द्वारा निम्नलिखित चरणों का पालन किया जाता है
आइए एक ऐरे {20, 12, 23, 55, 21} लें
ऐरे के पहले एलिमेंट को न्यूनतम के रूप में सेट करें।
न्यूनतम = 20न्यूनतम की तुलना अगले एलिमेंट से करें, यदि यह न्यूनतम से छोटा है तो इस एलिमेंट को न्यूनतम असाइन करें। इसे ऐरे के अंत तक करें।
12 से तुलना: 20 > 12, न्यूनतम = 12
23 से तुलना: 12 < 23, न्यूनतम = 12
55 से तुलना: 12 < 55, न्यूनतम = 12
21 से तुलना: 12 < 21, न्यूनतम = 12न्यूनतम को ऐरे की पहली स्थिति (इंडेक्स 0) पर रखें।
ऐरे = {12, 20, 23, 55, 21}अगली पुनरावृत्ति के लिए, पहले असॉर्टेड एलिमेंट से क्रमबद्ध करना शुरू करें यानी वह एलिमेंट जहां न्यूनतम रखा गया है उसके बगल में।
ऐरे = {12, 20, 23, 55, 21}
खोज 20 से शुरू होती है, वह अगला एलिमेंट जहां न्यूनतम रखा गया है।
पुनरावृत्ति 2:
न्यूनतम = 20
23 से तुलना: 20 < 23, न्यूनतम = 20
55 से तुलना: 20 < 55, न्यूनतम = 20
21 से तुलना: 20 < 21, न्यूनतम = 20
न्यूनतम जगह पर है कोई बदलाव नहीं,
ऐरे = {12, 20, 23, 55, 21}
पुनरावृत्ति 3:
न्यूनतम = 23.
55 से तुलना: 23 < 55, न्यूनतम = 23
21 से तुलना: 23 > 21, न्यूनतम = 21
न्यूनतम को इंडेक्स = 2 पर ले जाया गया
ऐरे = {12, 20, 21, 55, 23}
पुनरावृत्ति 4:
न्यूनतम = 55
23 से तुलना: 23 < 55, न्यूनतम = 23
न्यूनतम को इंडेक्स 3 पर ले जाया गया ऐरे = {12, 20, 21, 23, 55}
उदाहरण
#include <stdio.h>
int main() {
int arr[10]={6,12,0,18,11,99,55,45,34,2};
int n=10;
int i, j, position, swap;
for (i = 0; i < (n - 1); i++) {
position = i;
for (j = i + 1; j < n; j++) {
if (arr[position] > arr[j])
position = j;
}
if (position != i) {
swap = arr[i];
arr[i] = arr[position];
arr[position] = swap;
}
}
for (i = 0; i < n; i++)
printf("%d\t", arr[i]);
return 0;
}
आउटपुट
0 2 6 11 12 18 34 45 55 99