คอมพิวเตอร์การเขียนโปรแกรม

เทคนิคในการเขียนโปรแกรมการเรียงลำดับ: เรียงลำดับ "ฟอง"

การจัดเรียงฟองไม่ได้เป็นเพียงการพิจารณาให้เป็นวิธีที่เร็วที่สุดนอกจากนี้ยังปิดรายการของวิธีที่ช้าที่สุดในการจัดระเบียบ แต่ก็มีข้อดีของมัน ดังนั้นวิธีการของการเรียงลำดับฟอง - มากที่สุดที่ไม่เป็นวิธีธรรมชาติและตรรกะในการแก้ไขปัญหาถ้าคุณต้องการที่จะจัดรายการในลำดับที่เฉพาะเจาะจง คนธรรมดาด้วยตนเองเช่นนั้นจะใช้พวกเขา - เพียงแค่สัญชาตญาณ

Where did เช่นชื่อที่ผิดปกติ?

ชื่อวิธีขึ้นมาโดยใช้ความคล้ายคลึงของฟองอากาศในน้ำ มันเป็นคำอุปมา เพียงแค่ฟองอากาศเล็ก ๆ น้อย ๆ เพิ่มขึ้นสูงขึ้น - เพราะความหนาแน่นของพวกเขามีค่ามากกว่าของเหลว (ในกรณีนี้ - น้ำ) และแต่ละองค์ประกอบอาร์เรย์ที่มีขนาดเล็กมันคุ้มค่า, วิธีค่อยๆมากขึ้นไปด้านบนของหมายเลขรายการ

รายละเอียดของขั้นตอนวิธี

การจัดเรียงฟองจะดำเนินการดังต่อไปนี้:

  • ครั้งแรกผ่าน: องค์ประกอบของตัวเลขอาร์เรย์จะนำโดยสองคู่และเมื่อเทียบ ถ้าองค์ประกอบบางส่วนของทั้งสองคนทีมค่าแรกมากกว่าสองโปรแกรมที่ทำให้พวกเขามีสถานที่แลกเปลี่ยน
  • ดังนั้น จำนวนมากที่สุดของ พลาดท่าท้ายของอาร์เรย์ ในขณะที่ทุกองค์ประกอบอื่น ๆ ยังคงอยู่กับพวกเขาในลักษณะที่วุ่นวายและจำเป็นต้องมีการเรียงลำดับ;
  • และดังนั้นจึงจำเป็นต้องมีการผ่านที่สอง: มันถูกสร้างขึ้นโดยการเปรียบเทียบกับก่อนหน้านี้ (อธิบายแล้ว) และมีจำนวนของการเปรียบเทียบ - ลบหนึ่ง;
  • ที่บ้านเลขที่ทางสามรถหนึ่งน้อยกว่าสองและสองกว่าครั้งแรก และอื่น ๆ ;
  • สรุปว่าแต่ละทางมี (ค่าทั้งหมดในอาร์เรย์จำนวนเฉพาะ) ลบเปรียบเทียบ (หมายเลขเนื้อเรื่อง)

อัลกอริทึมแม้สั้นของโปรแกรมที่สามารถเขียนเป็น:

  • อาร์เรย์ของตัวเลขที่มีการตรวจสอบเป็นเวลานานเป็นตัวเลขสองจะพบที่สองของพวกเขาผูกพันที่จะมากขึ้นกว่าครั้งแรก;
  • ในตำแหน่งที่ไม่ถูกต้องในความสัมพันธ์กับแต่ละองค์ประกอบอื่น ๆ ของสัญญาแลกเปลี่ยนซอฟต์แวร์อาร์เรย์

pseudocode ขึ้นอยู่กับขั้นตอนวิธีการที่อธิบายไว้

การดำเนินงานที่ง่ายที่สุดที่จะดำเนินการดังต่อไปนี้:

ขั้นตอน Sortirovka_Puzirkom;

การเริ่มต้น

วงจร J จาก nachalnii_index เพื่อ konechii_index;

วงจรสำหรับฉันจาก nachalnii_index เพื่อ konechii_index-1;

ถ้า massiv [ผม]> massiv [ผม + 1] (องค์ประกอบแรกมากขึ้นกว่าที่สอง) แล้ว:

(เปลี่ยนสถานที่ค่า);

ปลาย

แน่นอนความเรียบง่ายนี้เท่านั้น aggravates สถานการณ์: ขั้นตอนวิธีการง่ายมากขึ้นก็ปรากฏข้อบกพร่องทั้งหมด สัดส่วนการลงทุนของเวลามากเกินไปแม้สำหรับอาร์เรย์ขนาดเล็ก (ที่นี่มาในทฤษฎีสัมพัทธ: จำนวนของเวลาสำหรับคนธรรมดาอาจดูเหมือนเล็ก แต่ในความเป็นจริงเป็นโปรแกรมเมอร์วินาทีหรือแม้แต่เสี้ยววินาทีทุกครั้ง)

มันต้องใช้เวลาในการดำเนินงานที่ดีขึ้น ยกตัวอย่างเช่นคำนึงถึงการแลกเปลี่ยนของค่าในสถานที่อาร์เรย์:

ขั้นตอน Sortirovka_Puzirkom;

การเริ่มต้น

sortirovka = true;

รอบจนกว่า sortirovka = true;

sortirovka = false;

วงจรสำหรับฉันจาก nachalnii_index เพื่อ konechii_index-1;

ถ้า massiv [ผม]> massiv [ผม + 1] (องค์ประกอบแรกมากขึ้นกว่าที่สอง) แล้ว:

(เปลี่ยนองค์ประกอบตำแหน่ง);

sortirovka = true; (ระบุว่าการแลกเปลี่ยนได้รับการทำ)

ปลาย

ข้อ จำกัด

ข้อเสียเปรียบหลัก - ระยะเวลาของกระบวนการ เวลาเท่าไหร่จะดำเนินการ เรียงลำดับขั้นตอนวิธี ฟอง?

ระยะเวลาการคำนวณจากจำนวนตัวเลขในตารางอาร์เรย์ - สิ้นผลของมันก็คือสัดส่วน

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

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

เกียรติ

การจัดเรียงฟองเป็นเรื่องง่ายมากที่จะเข้าใจ หลักสูตรของมหาวิทยาลัยเทคนิคในการศึกษาองค์ประกอบการสั่งซื้อของอาร์เรย์ที่ผ่านในครั้งแรก วิธีการที่ง่ายต่อการใช้ทั้งภาษาการเขียนโปรแกรม Delphi (L (Delphi) และ C / C ++ (C / C บวกบวก) ซึ่งเป็นค่าที่เรียบง่ายอย่างเหลือเชื่อของอัลกอริทึมที่ตั้งในการสั่งซื้อที่เหมาะสมและที่ ปาสคาล (Pascal). ฟองเรียงลำดับเหมาะสำหรับผู้เริ่มต้น

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

หลักการเรียงลำดับภาพ

มุมมองเริ่มต้นของอาร์เรย์ 8 22 4 74 44 37 1 7

ขั้นตอนที่ 8 22 1 4 74 44 37 1 7

22 4 8 74 44 1 37 7

8 22 4 74 1 44 37 7

22 8 4 1 74 44 37 7

8 22 1 4 74 44 37 7

22 8 1 4 74 44 37 7

1 8 22 4 74 44 37 7

ขั้นตอนที่ 1 8 2 22 4 74 44 7 37

8 22 1 4 7 74 44 37

8 22 1 4 7 74 44 37

8 22 1 4 7 74 44 37

1 8 4 22 7 74 44 37

1 4 8 22 7 74 44 37

ขั้นตอนที่ 4 3 1 8 22 7 74 37 44

1 4 8 22 7 37 74 44

1 4 8 22 7 37 74 44

1 4 8 7 22 37 74 44

1 4 7 8 22 37 74 44

ขั้นตอนที่ 1 4 4 7 8 22 37 44 74

1 4 7 8 22 37 44 74

1 4 7 8 22 37 44 74

1 4 7 8 22 37 44 74

ขั้นตอนที่ 1 4 5 7 8 22 37 44 74

1 4 7 8 22 37 44 74

1 4 7 8 22 37 44 74

ขั้นตอนที่ 1 4 6 7 8 22 37 44 74

1 4 7 8 22 37 44 74

ขั้นตอนที่ 4 7 1 7 8 22 37 44 74

ตัวอย่างเช่นการจัดเรียงฟองในปาสคาล

ตัวอย่างเช่น:

kol_mas const = 10;

var massiv: อาร์เรย์ [1..kol_mas] ของ จำนวนเต็ม;

A, B, K: จำนวนเต็ม;

เริ่มต้น

writeln ( 'ป้อนข้อมูล' kol_mas, 'องค์ประกอบของอาร์เรย์');

ค้นหา: = 1 ถึง kol_mas ทำ readln (massiv [เป็น ]);

ค้นหา: = 1 ถึง kol_mas-1 ทำเริ่มต้น

สำหรับ b: = a + 1 เพื่อ kol_mas จะเริ่มต้น

ถ้า massiv [เป็น]> massiv [ b] จากนั้นเริ่มต้น

k = massiv [เป็น]; massiv [เป็น] = massiv [ b]; massiv [b] = k;

จบ;

จบ;

จบ;

writeln ( 'หลังจากที่จัดเรียง');

ค้นหา: = 1 ถึง kol_mas ทำ writeln (massiv [เป็น ]);

ปลาย

ฟองตัวอย่างการเรียงลำดับในภาษา C (C)

ตัวอย่างเช่น:

#include

#include

int main (int argc, char * argv [])

{

int massiv [8] = {36, 697, 73, 82, 68, 12, 183, 88} i, ff;

สำหรับ (;;) {

ff = 0;

สำหรับ (i = 7; i> 0; I -) {

ถ้า (massiv [ผม] [i- 1]) {

แลกเปลี่ยน (massiv [ผม] massiv [i- 1]);

ff ++;

}

}

ถ้า (ff == 0) break;

}

getch (); // ล่าช้าการแสดงผล

กลับ 0;

}

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 th.birmiss.com. Theme powered by WordPress.