สิ่งที่คุณต้องรู้เกี่ยวกับ Quicksort ใน C ++



บทความนี้จะให้ความรู้โดยละเอียดและครอบคลุมเกี่ยวกับวิธีใช้ Quicksort ใน C ++ พร้อมตัวอย่าง

อัลกอริทึมการเรียงลำดับมีมากมายเหลือเฟือ การค้นหาความเหมาะสมกับแอปพลิเคชันของคุณเป็นงานที่ต้องมีความเข้าใจสั้น ๆ เกี่ยวกับปัจจัยต่างๆเช่นประสิทธิภาพความซับซ้อนของเวลาความยาวของโค้ด ฯลฯ ของอัลกอริทึมเฉพาะ ในโพสต์นี้เราจะดูแนวคิดสำคัญทั้งหมดที่จำเป็นในการใช้ Quicksort ใน C ++ ตามลำดับต่อไปนี้:

การทำความเข้าใจ Quicksort Algorithm

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





  1. ขั้นแรกเราจะขออาร์เรย์ที่ไม่ได้เรียงลำดับจากผู้ใช้

  2. เมื่อเรามีอาร์เรย์ที่ไม่ได้เรียงลำดับแล้วเราจำเป็นต้องเลือกค่า Pivot จากอาร์เรย์ เราสามารถเลือกค่าใดก็ได้



  3. เมื่อเราเลือกจุดหมุนหลังจากนั้นเราจำเป็นต้องจัดเรียงองค์ประกอบอื่น ๆ ของอาร์เรย์ในลักษณะที่องค์ประกอบทั้งหมดที่น้อยกว่าค่าเดือยควรวางไว้ทางด้านขวาของค่าเดือยและองค์ประกอบทั้งหมดที่มากกว่าเดือย ค่าจะถูกวางไว้ทางด้านขวาของค่าเดือย

  4. เราดำเนินการขั้นตอนที่ 3 จนกว่าเราจะได้รับอาร์เรย์ที่จัดเรียง

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



java ide ที่ดีที่สุดคืออะไร

สวัสดี [5, 4, 1, 11, 9, 6, 2, 3] สำหรับตัวอย่างนี้เราจะพิจารณาเดือยเป็นองค์ประกอบด้านขวาสุดของรายการเสมอ

Quicksort ใน C ++

มาดูแต่ละขั้นตอนและทำความเข้าใจกับตรรกะที่เราใช้ในการแก้ปัญหา

  • อันดับแรกเราเลือก '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

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