อัลกอริทึมการเรียงลำดับมีมากมายเหลือเฟือ การค้นหาความเหมาะสมกับแอปพลิเคชันของคุณเป็นงานที่ต้องมีความเข้าใจสั้น ๆ เกี่ยวกับปัจจัยต่างๆเช่นประสิทธิภาพความซับซ้อนของเวลาความยาวของโค้ด ฯลฯ ของอัลกอริทึมเฉพาะ ในโพสต์นี้เราจะดูแนวคิดสำคัญทั้งหมดที่จำเป็นในการใช้ Quicksort ใน C ++ ตามลำดับต่อไปนี้:
- การทำความเข้าใจ Quicksort Algorithm
- Pseudocode สำหรับ Quicksort
- โปรแกรม Quicksort ใน C ++
- Quicksort ความซับซ้อนของเวลา
การทำความเข้าใจ Quicksort Algorithm
เหมือนกับ ผสานการเรียง Quicksort เป็นไปตามกลยุทธ์การแบ่งและพิชิต ด้วยการใช้กลยุทธ์แบ่งและพิชิตเราแบ่งปัญหาออกเป็นปัญหาย่อยหลาย ๆ ปัญหาและแก้ปัญหาซ้ำ ๆ ขั้นแรกเราจะเข้าใจกระบวนการทั้งหมดทีละขั้นตอนและหลังจากนั้นด้วยความช่วยเหลือของตัวอย่างเราจะพัฒนาความเข้าใจอย่างลึกซึ้งเกี่ยวกับกระบวนการทั้งหมด
ขั้นแรกเราจะขออาร์เรย์ที่ไม่ได้เรียงลำดับจากผู้ใช้
เมื่อเรามีอาร์เรย์ที่ไม่ได้เรียงลำดับแล้วเราจำเป็นต้องเลือกค่า Pivot จากอาร์เรย์ เราสามารถเลือกค่าใดก็ได้
เมื่อเราเลือกจุดหมุนหลังจากนั้นเราจำเป็นต้องจัดเรียงองค์ประกอบอื่น ๆ ของอาร์เรย์ในลักษณะที่องค์ประกอบทั้งหมดที่น้อยกว่าค่าเดือยควรวางไว้ทางด้านขวาของค่าเดือยและองค์ประกอบทั้งหมดที่มากกว่าเดือย ค่าจะถูกวางไว้ทางด้านขวาของค่าเดือย
เราดำเนินการขั้นตอนที่ 3 จนกว่าเราจะได้รับอาร์เรย์ที่จัดเรียง
ตอนนี้เรามาดูตัวอย่างและใช้อัลกอริทึมและดูว่ามันทำงานอย่างไร
java ide ที่ดีที่สุดคืออะไร
สวัสดี [5, 4, 1, 11, 9, 6, 2, 3] สำหรับตัวอย่างนี้เราจะพิจารณาเดือยเป็นองค์ประกอบด้านขวาสุดของรายการเสมอ
มาดูแต่ละขั้นตอนและทำความเข้าใจกับตรรกะที่เราใช้ในการแก้ปัญหา
อันดับแรกเราเลือก '3' เป็นเดือยและจัดเรียงองค์ประกอบทั้งหมดที่น้อยกว่า '3' ทางด้านขวาและองค์ประกอบทั้งหมดที่มีค่ามากกว่า '3' ทางด้านขวา
วิธีสร้างคลาสซิงเกิลตัน
ณ จุดนี้เรามีปัญหาย่อย 2 ปัญหา ก่อนอื่นเรามาแก้ปัญหาย่อยทางด้านขวา เราเลือกอันหนึ่งเป็นเดือยและวาง '2' ไว้ทางขวา
ในการแก้ปัญหาย่อยที่สองเราเลือก '6' เป็นเดือยและวางองค์ประกอบตามที่เราได้กล่าวไว้ก่อนหน้านี้
เรามีปัญหาย่อยอีก 2 ปัญหา อันแรกแก้ไขได้โดยเลือก 4 เป็นเดือยและอันที่สองแก้ไขได้โดยเลือก 9 เป็นเดือย สุดท้ายเรามีอาร์เรย์ที่จัดเรียงของเราพร้อมองค์ประกอบที่วางไว้ที่ดัชนีขีดเส้นใต้
บันทึก- ประเด็นสำคัญที่ต้องเข้าใจก็คือการดำเนินการทั้งหมดเกิดขึ้นในอาร์เรย์เดียวกัน ไม่ได้สร้างอาร์เรย์ใหม่
Pseudocode สำหรับ Quicksort ใน C ++
QuickSort (อาร์เรย์ [], start_index, end_index) {if (start_indexโปรแกรม Quicksort ใน C ++
เราเข้าใจอัลกอริทึมและพัฒนาความเข้าใจอย่างลึกซึ้งเกี่ยวกับการทำงานของอัลกอริทึม มาใช้ Quicksort ใน C ++ และเขียนโปรแกรมเพื่อจัดเรียงอาร์เรย์
วิธีเปลี่ยนเส้นทาง java#include โดยใช้ namespace std void swap_elements (int * a, int * b) {int temp = * a * a = * b * b = temp} int partition (int array [], int start_index, int end_index) {int pivot = อาร์เรย์ [end_index] int i = (start_index - 1) สำหรับ (int j = start_index j<= end_index- 1 j++) { if (array[j] <= pivot) { i++ swap_elements(&array[i], &array[j]) } } swap_elements(&array[i + 1], &array[end_index]) return (i + 1) } void quickSort(int array[], int start_index, int end_index) { if (start_index < end_index) { int partition_index = partition(array, start_index, end_index) quickSort(array, start_index, partition_index - 1) quickSort(array, partition_index + 1, end_index) } } void printArray(int array[], int number) { int i cout<<'Sorted Array: ' for (i = 0 i < number i++) cout << array[i] << ' ' cout << endl } int main() { int Hello[30] int i int NumberofElements cout<>ต้นทุน NumberofElements<<'Enter the elements one by one: ' for(i=0i>สวัสดี [i]} quickSort (สวัสดี 0, NumberofElements-1) printArray (สวัสดี NumberofElements) return 0}เอาท์พุต:
ความซับซ้อนของเวลา
เรามาพูดถึงสิ่งที่สำคัญที่สุดของอัลกอริทึมการเรียงลำดับนั่นคือความซับซ้อนของเวลา มันบอกเราเกี่ยวกับประสิทธิภาพของอัลกอริทึมในสถานการณ์ต่างๆ ค่าเหล่านี้สามารถช่วยเราในการตัดสินใจว่าเราสามารถใช้อัลกอริทึมนี้สำหรับแอปพลิเคชันของเราได้หรือไม่
- กรณีที่ดีที่สุด - บน)
- กรณีเฉลี่ย - (nlogn)
- กรณีที่เลวร้ายที่สุด- บน2)
ด้วยเหตุนี้เราจึงมาถึงจุดสิ้นสุดของ Quicksort ในบทความ C ++ หากคุณต้องการเรียนรู้เพิ่มเติมโปรดดูไฟล์ โดย Edureka บริษัท การเรียนรู้ออนไลน์ที่เชื่อถือได้ หลักสูตรการฝึกอบรมและการรับรอง Java J2EE และ SOA ของ Edureka ได้รับการออกแบบมาเพื่อฝึกอบรมคุณสำหรับแนวคิด Java ทั้งหลักและขั้นสูงพร้อมกับกรอบงาน Java ต่างๆเช่น Hibernate & Spring
มีคำถามสำหรับเรา? โปรดระบุไว้ในส่วนความคิดเห็นของบล็อกนี้และเราจะติดต่อกลับโดยเร็วที่สุด