คอมพิวเตอร์, การเขียนโปรแกรม
เทคนิคในการเขียนโปรแกรมการเรียงลำดับ: เรียงลำดับ "ฟอง"
การจัดเรียงฟองไม่ได้เป็นเพียงการพิจารณาให้เป็นวิธีที่เร็วที่สุดนอกจากนี้ยังปิดรายการของวิธีที่ช้าที่สุดในการจัดระเบียบ แต่ก็มีข้อดีของมัน ดังนั้นวิธีการของการเรียงลำดับฟอง - มากที่สุดที่ไม่เป็นวิธีธรรมชาติและตรรกะในการแก้ไขปัญหาถ้าคุณต้องการที่จะจัดรายการในลำดับที่เฉพาะเจาะจง คนธรรมดาด้วยตนเองเช่นนั้นจะใช้พวกเขา - เพียงแค่สัญชาตญาณ
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 [ผม]
แลกเปลี่ยน (massiv [ผม] massiv [i- 1]);
ff ++;
}
}
ถ้า (ff == 0) break;
}
getch (); // ล่าช้าการแสดงผล
กลับ 0;
}
Similar articles
Trending Now