จะใช้การเรียงลำดับการเลือกใน C ได้อย่างไร

เผยแพร่แล้ว: 2023-01-06

การเลือก Sort เป็นอีกหนึ่งอัลกอริทึมที่ทำงานโดยการค้นหาจำนวนเต็มต่ำสุดของอาร์เรย์ จากนั้นกำหนดให้กับตำแหน่งบนสุด ดัชนีถัดจากตำแหน่งของจำนวนเต็มที่น้อยที่สุดจะถูกใช้เพื่อเริ่มต้นอาร์เรย์ที่ต้องสแกนต่อไปนี้

สารบัญ

ตัวอย่างการเรียงลำดับ Selection ในภาษาซี

หากเรานำอาร์เรย์ที่มีตัวเลข [10,2,8,4,6] ซึ่งจำนวนที่น้อยที่สุดคือ 2 ดังนั้น เราจะวางจำนวนที่น้อยที่สุดซึ่งก็คือ 2 ในตำแหน่งแรก หลังจากนั้นอาร์เรย์จะมีลักษณะ เช่น [2,10,8,4,6] ต่อไปเราจะใช้จำนวนที่น้อยที่สุดถัดไป เพราะ 2 อยู่ในตำแหน่งที่ถูกต้องแล้ว จำนวนที่น้อยที่สุดถัดไปคือ 4 ซึ่งจะถูกวางไว้ในตำแหน่งที่สอง หลังจากนั้นอาร์เรย์จะถูกค้นหาในทำนองเดียวกันจนกว่าจะถูกจัดเรียงในที่สุด

การเรียงลำดับการเลือกใน C จะเรียงลำดับตัวเลขจากน้อยไปหามาก การแก้ไขอัลกอริทึมทำให้สามารถจัดเรียงตัวเลขใน Selection Sort จากมากไปหาน้อยได้ นอกจากนี้ยังสามารถดำเนินการในภาษาอื่นนอกเหนือจาก C เช่น Selection Sort C++ หรือ Selection Sort Python

เรียนรู้หลักสูตรการพัฒนาซอฟต์แวร์ออนไลน์จากมหาวิทยาลัยชั้นนำของโลก รับโปรแกรม PG สำหรับผู้บริหาร โปรแกรมประกาศนียบัตรขั้นสูง หรือโปรแกรมปริญญาโทเพื่อติดตามความก้าวหน้าในอาชีพของคุณอย่างรวดเร็ว

อัลกอริทึมการเรียงลำดับการเลือก

  • ขั้นแรก เราตั้งค่าองค์ประกอบเริ่มต้นในการจัดเรียงการเลือกเป็นค่าต่ำสุด และค้นหาองค์ประกอบที่เล็กที่สุดในอาร์เรย์สำหรับขั้นตอนที่ถูกต้องของ อัลกอริทึมการเรียงลำดับการ เลือก
  • ตอนนี้องค์ประกอบขั้นต่ำถูกเปรียบเทียบกับองค์ประกอบที่สอง หากองค์ประกอบที่สองต่ำกว่าค่าต่ำสุด เราจะสลับองค์ประกอบเหล่านั้นแล้วกำหนดค่าขั้นต่ำให้กับองค์ประกอบที่สาม
  • มิฉะนั้นเราจะดำเนินการต่อไปยังองค์ประกอบที่สามและเปรียบเทียบกับค่าต่ำสุด ถ้าองค์ประกอบที่สองเกินองค์ประกอบแรกของเรา เราจะสลับมัน ทำซ้ำขั้นตอนนี้จนถึงส่วนประกอบสุดท้าย
  • หลังจากการวนซ้ำแต่ละครั้ง เราจะเห็นว่าค่าต่ำสุดของเรามาถึงจุดเริ่มต้นของรายการที่ไม่เรียงลำดับแล้ว
  • เราจะเริ่มสร้างดัชนีจากรายการแรกของรายการที่ไม่เรียงลำดับสำหรับการวนซ้ำแต่ละครั้ง เราจะทำซ้ำขั้นตอนที่ 1 ถึง 4 หลาย ๆ ครั้งจนกว่ารายการจะถูกจัดเรียงหรือองค์ประกอบทั้งหมดอยู่ในตำแหน่งที่เหมาะสม

หลักสูตรและบทความยอดนิยมเกี่ยวกับวิศวกรรมซอฟต์แวร์

โปรแกรมยอดนิยม
โปรแกรม Executive PG ในการพัฒนาซอฟต์แวร์ - IIIT B โปรแกรมใบรับรอง Blockchain - PURDUE โปรแกรมใบรับรองความปลอดภัยทางไซเบอร์ - PURDUE MSC ในวิทยาการคอมพิวเตอร์ - IIIT B
บทความยอดนิยมอื่น ๆ
เงินเดือนวิศวกรคลาวด์ในสหรัฐอเมริกา 2021-22 เงินเดือนสถาปนิกโซลูชัน AWS ในสหรัฐอเมริกา เงินเดือนนักพัฒนาแบ็กเอนด์ในสหรัฐอเมริกา เงินเดือนนักพัฒนาส่วนหน้าในสหรัฐอเมริกา
เงินเดือนนักพัฒนาเว็บในสหรัฐอเมริกา คำถามสัมภาษณ์ Scrum Master ในปี 2022 จะเริ่มอาชีพใน Cyber ​​​​Security ในปี 2565 ได้อย่างไร ตัวเลือกอาชีพในสหรัฐอเมริกาสำหรับนักศึกษาวิศวกรรม

ตัวอย่างต่อไปนี้ที่มีการวนซ้ำแต่ละครั้งจะช่วยให้เข้าใจกระบวนการ เรียงลำดับการเลือกในภาษา C โดยละเอียด–

ทำซ้ำ #1

ฉัน [ ] = 8,5,2,6,4

ตั้งค่าขั้นต่ำ - 8

เปรียบเทียบ i 0 และ i 1

เช่น i 0 > i 1 ตั้งค่าขั้นต่ำ = 5

  • เปรียบเทียบ i 1 กับ i 2

เช่น i 1 > i 2 ตั้งค่าค่าต่ำสุด = 2

  • เปรียบเทียบ i 2 และ i 3

เช่น i 2 < i 3 ตั้งค่าค่าต่ำสุด= 2

  • เปรียบเทียบ i 2 และ i 4

เช่น i 2 < i 4 ตั้งค่าค่าต่ำสุด =2

2 เป็นจำนวนที่น้อยที่สุดในบรรดาองค์ประกอบทั้งหมด เราต้องสลับ i 0 กับ i 2

­ การทำซ้ำ #2

ฉัน [ ]= 2,5,8,6,4

ตั้งขั้นต่ำ5

  • เปรียบเทียบ i 1 กับ i 2

เช่น i 1 < i 2 ตั้งค่าขั้นต่ำ = 5

  • เปรียบเทียบ i 1 และ i 3

เมื่อ i 1 < i 3 ตั้งค่าค่าต่ำสุด = 5

  • เปรียบเทียบ i 1 และ i 4

อีกครั้ง i 1 < i 4 ตั้งค่าขั้นต่ำ = 4

4 เป็นองค์ประกอบที่เล็กที่สุดในอาร์เรย์ ดังนั้น เราต้องสลับ i 1 และ i 4

การทำซ้ำ #3

ฉัน [ ]= 2,4,8,6,5

ตั้งขั้นต่ำ8

  • เปรียบเทียบ i 2 และ i 3

เช่น i 2 > i 3 ตั้งค่าขั้นต่ำ = 6

  • เปรียบเทียบ i 3 และ i 4

เช่น i 3 > i 4 ตั้งค่าขั้นต่ำ = 5

5 เป็นองค์ประกอบที่เล็กที่สุดในอาร์เรย์ คุณต้องสลับ i 2 และ i 4

การทำซ้ำ #4

ฉัน [ ] = 2,4,5,6,8

ตั้งขั้นต่ำ6

  • เปรียบเทียบ i 3 และ i 4

เมื่อ i 3 < i 4 ตั้งค่าค่าต่ำสุด = 6

ขั้นต่ำถูกวางไว้ในตำแหน่งที่ถูกต้อง ดังนั้นจะไม่มีการแลกเปลี่ยนเกิดขึ้น

ตัวอย่างการเรียงลำดับการเลือกในภาษาซี

// เรียงลำดับการเลือกในภาษาซี

#รวม <stdio.h>

// ฟังก์ชั่นสลับตำแหน่งของสององค์ประกอบ

การแลกเปลี่ยนเป็นโมฆะ (int *a, int *b) {

อุณหภูมิ int = *a;

*ก = *ข;

*b = อุณหภูมิ;

}

ถือเป็นโมฆะ SelectionSort (int อาร์เรย์ [], ขนาด int) {

สำหรับ (int step = 0; step <ขนาด – 1; step++) {

int min_idx = ขั้นตอน;

สำหรับ (int i = step + 1; i <ขนาด; i++) {

// หากต้องการเรียงลำดับจากมากไปน้อย ให้เปลี่ยน > เป็น < ในบรรทัดนี้

// เลือกองค์ประกอบขั้นต่ำในแต่ละลูป

ถ้า (อาร์เรย์[i] < อาร์เรย์[min_idx])

min_idx = ฉัน;

}

// ใส่ min ที่ตำแหน่งที่ถูกต้อง

สลับ (&อาร์เรย์[min_idx], &อาร์เรย์[ขั้นตอน]);

}

}

// ฟังก์ชันพิมพ์อาร์เรย์

เป็นโมฆะ printArray (int อาร์เรย์ [], ขนาด int) {

สำหรับ (int i = 0; i <ขนาด; ++i) {

printf(“%d“, อาร์เรย์[i]);

}

printf(“\n”);

}

// รหัสไดรเวอร์

int หลัก () {

ข้อมูล int[] = {20, 12, 10, 15, 2};

ขนาด int = sizeof (ข้อมูล) / sizeof (ข้อมูล [0]);

SelectionSort (ข้อมูล, ขนาด);

printf(“เรียงอาร์เรย์ตามลำดับ:\n”);

printArray(ข้อมูล, ขนาด);

}

การวิเคราะห์ความซับซ้อนของการเรียงลำดับการเลือก

อินพุต – n รายการอินพุตจะได้รับ

เอาต์พุต – จำนวนขั้นตอนที่จำเป็นในการเรียงลำดับรายการ

ลอจิก – ถ้าเราได้รับ n รายการ มันจะทำการเปรียบเทียบ n-1 ในรอบแรก, n-2 เปรียบเทียบในรอบที่สอง, n-3 เปรียบเทียบในรอบที่สาม และอื่นๆ ดังนั้น จำนวนรวมของการเปรียบเทียบอาจคำนวณได้โดยใช้

เอาท์พุต –

(n+1) + (n+2) + (n+3) + (n+4) + …. +1

ผลรวม = n(n-1)/2 เช่น O(n²)

เนื่องจากวิธีการเรียงลำดับแบบเลือกต้องการพื้นที่หน่วยความจำเพิ่มเติมสำหรับตัวแปรชั่วคราวสำหรับการสลับ จึงมีความซับซ้อนของเวลาเท่ากับ O(n2) และความซับซ้อนของพื้นที่เท่ากับ O(1)

การวิเคราะห์ความซับซ้อนของการเรียงลำดับเวลา

กรณีที่ดีที่สุด: สำหรับอาร์เรย์ที่มีการเรียงลำดับก่อนหน้านี้ วิธีการเรียงลำดับแบบเลือกจะมีความซับซ้อนของเวลาในกรณีที่ดีที่สุดเท่ากับ O(n²)

กรณีเฉลี่ย: อัลกอริทึมการเรียงลำดับการเลือกมีความซับซ้อนของเวลาเฉลี่ยกรณีและปัญหาเท่ากับ O(n²) เมื่อรายการถูกจัดเรียงแบบสับสน กล่าวคือ ไม่ได้เรียงลำดับจากน้อยไปหามากหรือจากมากไปน้อย

Worst Case: เมื่อเรากลับลำดับจากมากไปน้อยของอาร์เรย์เป็นลำดับจากน้อยไปมาก ความซับซ้อนของเวลาที่เลวร้ายที่สุดคือ O(n²)

ความซับซ้อนทางเวลาของวิธีการเรียงลำดับการเลือกคือ O(n²) ในแต่ละสถานการณ์จากสามสถานการณ์ นี่คือความจริงที่ว่าเราต้องระบุรายการขั้นต่ำเปล่าสำหรับแต่ละด่านเพื่อจัดเรียงอย่างเหมาะสม หลังจากติดตามอาร์เรย์ทั้งหมดแล้ว เราจะพบองค์ประกอบขั้นต่ำของเรา

บทสรุป

นี่เป็นการปิดบล็อกโพสต์เรื่อง “Selection Sort In C” คุณต้องเข้าใจว่าสามารถดำเนินการในภาษาอื่นได้เช่นกัน เช่น Selection Sort C++ และ Selection Sort Python เราหวังว่าบทความนี้จะช่วยให้คุณเข้าใจวิธีการจัดเรียงองค์ประกอบในภาษาซี

การเรียงลำดับการเลือกไม่ได้เป็นเพียงส่วนเดียวในการเดินทางสู่การเป็นโปรแกรมเมอร์ หากคุณหวังว่าจะได้รับการส่งเสริมที่สำคัญในอาชีพการพัฒนาซอฟต์แวร์ของคุณด้วยวุฒิการศึกษาระดับมืออาชีพ upGrad อยู่ที่นี่แล้ว! การพัฒนาส่วนหน้าของ upGrad (JavaScript, HTML, CSS), แบ็กเอนด์ (NoSQL-MongoDB) และไมโครเซอร์วิส จากนั้นคุณสามารถเรียนหลักสูตรวิทยาศาสตรมหาบัณฑิตสาขาวิทยาการคอมพิวเตอร์ของ UpGrad ได้ จัดทำโดย IIIT Bangalore & LJMU Alumni Status หลักสูตรนี้ช่วยให้คุณมีอาชีพเป็นวิศวกรซอฟต์แวร์/นักพัฒนาฟูลสแตกกับยักษ์ใหญ่ด้านเทคโนโลยีทั่วโลก

หลักสูตรนี้ครอบคลุมความรู้พื้นฐานของเครื่องมือต่างๆ เช่น Java, Spring และ Hibernate ซึ่งจะช่วยเสริมทักษะการพัฒนาแบบฟูลสแต็กของเราเพื่อสำรวจตลาดงานด้วยโอกาสที่น่าทึ่ง

ลงทะเบียน เพื่อเรียนรู้เพิ่มเติม!

การเรียงลำดับการเลือกหมายถึงอะไรในโครงสร้างข้อมูล

อัลกอริทึมการเรียงลำดับแบบตรงไปตรงมาคือการเรียงลำดับแบบเลือก รายการจะถูกแบ่งออกเป็นสองซีกในกระบวนการเรียงลำดับตามการเปรียบเทียบในสถานที่นี้ ส่วนที่เรียงลำดับที่ปลายด้านซ้ายและส่วนที่ไม่เรียงลำดับที่ด้านขวาสุด รายการโดยรวมเริ่มต้นในครึ่งที่ไม่เรียงลำดับ และส่วนที่เรียงลำดับว่างเปล่า

การเรียงลำดับอย่างรวดเร็วใน C คืออะไร?

อัลกอริทึมการเรียงลำดับที่เรียกว่า Quicksort ขึ้นอยู่กับกลยุทธ์การแบ่งและพิชิต อาร์เรย์ถูกแบ่งออกเป็นอาร์เรย์ย่อย (องค์ประกอบที่เลือกจากอาร์เรย์) โดยการเลือกองค์ประกอบเดือย

การเลือก 2 ทางในภาษา C คืออะไร?

เมื่อมีชุดคำสั่งสองชุด ชุดหนึ่งสำหรับเมื่อเงื่อนไขบูลีนเป็นจริงและอีกชุดหนึ่งสำหรับเมื่อเป็นเท็จ สิ่งนี้เรียกว่าการเลือกแบบสองทาง (if/else)