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

Java Bubble Sort:คู่มือ

วิธีการเขียน Java Bubble Sort

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

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

Java Bubble Sort คืออะไร

การเรียงลำดับแบบฟองคืออัลกอริธึมที่จัดเรียงค่าโดยการเปรียบเทียบองค์ประกอบที่อยู่ติดกันและสลับกันหากปรากฏในลำดับที่ไม่ถูกต้อง

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

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

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

Bubble Sorts ทำงานอย่างไร

ก่อนที่เราจะเริ่มเขียนโค้ดสำหรับ Java Bubble sort เราต้องเข้าใจก่อนว่าอัลกอริธึมนี้ถูกนำไปใช้ในทางปฏิบัติอย่างไร

พิจารณารายการต่อไปนี้:

81% ของผู้เข้าร่วมกล่าวว่าพวกเขารู้สึกมั่นใจมากขึ้นเกี่ยวกับโอกาสในการทำงานด้านเทคโนโลยีหลังจากเข้าร่วม bootcamp จับคู่กับ Bootcamp วันนี้

ผู้สำเร็จการศึกษาจากหลักสูตร bootcamp โดยเฉลี่ยใช้เวลาน้อยกว่าหกเดือนในการเปลี่ยนอาชีพ ตั้งแต่เริ่มต้น bootcamp ไปจนถึงหางานแรก

5 9 2 7

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

หากองค์ประกอบแรกมากกว่าองค์ประกอบที่สอง องค์ประกอบเหล่านี้จะสลับตำแหน่ง ในกรณีนี้ 5 ไม่เกิน 9 ดังนั้นองค์ประกอบจะคงอยู่ในตำแหน่งเดียวกัน

จากนั้น การเรียงลำดับของเราจะเปรียบเทียบสองรายการถัดไปในรายการของเรา 9 มากกว่า 2 ดังนั้นตัวเลขสองตัวนี้จึงสลับกัน:

5 2 9 7

กระบวนการนี้จะทำซ้ำจนกว่าจะมีการเปรียบเทียบทุกรายการในรายการ ในกรณีนี้ มีการเปรียบเทียบที่ต้องทำอีกอย่างหนึ่งคือ 9 มากกว่า 7 หรือไม่ 9 มากกว่า 7 ดังนั้นตัวเลขเหล่านี้จึงสลับกัน:

5 2 7 9

รายการของเราเกือบจะสั่งแล้ว เมื่อเปรียบเทียบทุกรายการแล้ว การเรียงลำดับฟองจะเริ่มใหม่อีกครั้งจนกว่าทุกองค์ประกอบจะถูกจัดเรียง

5 มากกว่า 2 ดังนั้นตัวเลขเหล่านี้จึงสลับกัน

2 5 7 9

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

วิธีการเขียน Java Bubble Sort

การรู้ทฤษฎีเป็นสิ่งหนึ่ง แต่คุณมาที่นี่เพื่อเรียนรู้เกี่ยวกับการเรียงลำดับฟองสบู่ของ Java เรามาคุยกันถึงวิธีการใช้การเรียงลำดับแบบฟองสบู่ใน Java

การเรียงลำดับฟองมีสองประเภท:

  • การจัดเรียงลูกโป่งมาตรฐาน
  • การจัดเรียงฟองอากาศที่เหมาะสมที่สุด

การเรียงลำดับแบบฟองมาตรฐานทำให้การเปรียบเทียบที่เป็นไปได้ทั้งหมด แม้ว่าจะมีการเรียงลำดับอาร์เรย์ก็ตาม สิ่งนี้จะเพิ่มเวลาที่ใช้ในการเรียงลำดับฟอง ทำให้การเรียงลำดับมีประสิทธิภาพน้อยลง

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

มาเริ่มด้วยการเขียนการเรียงแบบฟองสบู่มาตรฐานกัน

การเรียงลำดับบับเบิ้ลมาตรฐาน

ในการเริ่มต้น เราจะนำเข้าไลบรารี Arrays ลงในโค้ดของเรา เราจะใช้สิ่งนี้ในโค้ดของเราในภายหลังเพื่อพิมพ์รายการหมายเลขที่จัดเรียงไปยังคอนโซล:

import java.util.Arrays;

ตอนนี้หมดหนทางแล้ว เราสามารถเริ่มเขียนอัลกอริทึมของเราได้

เราจะเริ่มต้นด้วยการกำหนดคลาสที่เรียกว่า BubbleSort ซึ่งจัดเก็บโค้ดสำหรับโปรแกรม Java ของเรา และฟังก์ชันที่ดำเนินการจัดเรียงของเรา:

class BubbleSort {
	void sortNumbers(int array[]) {
		int size = array.length;

		for (int item = 0; item < size - 1; item++) {
			for (int j = 0; j < size - item - 1; j++) {
				if (array[j] > array[j + 1]) {
					int temporary = array[j];
					array[j] = array[j + 1];
					array[j + 1] = temporary;
				}
			}
		}
	}
}

เราได้ประกาศฟังก์ชันที่เรียกว่า sortNumbers ซึ่งรับตัวแปรเป็นพารามิเตอร์ ฟังก์ชันนี้เริ่มต้นด้วยการคำนวณขนาดของรายการตัวเลขที่เราระบุ

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

หากรายการทางด้านซ้ายของรายการมากกว่าตัวเลขทางด้านขวา ค่าจะถูกสลับ มิฉะนั้นจะไม่มีอะไรเกิดขึ้น

เราทำการแลกเปลี่ยนนี้โดยกำหนดค่าทางด้านซ้ายให้กับตัวแปรที่เรียกว่า "ชั่วคราว" เรากำหนดค่าทางด้านขวาของค่าที่อยู่ทางด้านซ้ายของการเปรียบเทียบ จากนั้น ค่าทางด้านซ้ายจะถูกกำหนดค่าของตัวแปรชั่วคราว

ถ้าเทียบกัน 6 กับ 5 จะสลับกัน ดังนั้นรายการของเราจะปรากฏเป็น:6, 5

โปรแกรมของเรายังไม่ได้ทำอะไรเลย เรายังไม่ได้เขียนโปรแกรมหลักที่เรียกใช้ฟังก์ชันของเราและให้รายการเพื่อจัดเรียง

เพิ่มโค้ดต่อไปนี้ใต้ sortNumbers ฟังก์ชันในรหัสของคุณ:

public static void main(String args[]) {
	int[] toSort = { 5, 9, 2, 7 };
	BubbleSort sortingAlgorithm = new BubbleSort();
	sortingAlgorithm.sortNumbers(toSort);
	System.out.println(Arrays.toString(toSort));
}

เราได้ประกาศตัวแปรที่เรียกว่า toSort ซึ่งเก็บรายการค่าที่เราต้องการจัดเรียง จากนั้นเราได้ประกาศอินสแตนซ์ของคลาส BubbleSort ที่เรียกว่า sortingAlgorithm ซึ่งเราใช้ในโค้ดบรรทัดถัดไปเพื่อเรียก sortNumbers การทำงาน. เมื่อเรียกใช้ฟังก์ชันนี้ รายการของเราจะถูกจัดเรียง

สุดท้าย เราใช้ Arrays.toString() วิธีการแปลงรายการของเราเป็นสตริงเพื่อให้เราสามารถพิมพ์ไปยังคอนโซลได้ รหัสของเราส่งคืน:

[2, 5, 7, 9]

ขณะนี้มีอาร์เรย์ที่จัดเรียงแล้ว!

เพิ่มประสิทธิภาพการจัดเรียงบับเบิ้ล

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

เราสามารถป้องกันพฤติกรรมนี้ได้โดยการเพิ่มตัวแปรใหม่ลงในโค้ดของเรา ซึ่งจะทำให้เราสามารถหยุดการเรียงลำดับของเราได้หากมีการสลับรายการ มาเพิ่มตัวแปรนี้ใน sortNumbers . ของเรา ฟังก์ชันจากก่อนหน้านี้:

class BubbleSort {
	void sortNumbers(int array[]) {
		int size = array.length;

		for (int item = 0; item < size - 1; item++) {
			boolean hasSwapped = false;
			for (int j = 0; j < size - item - 1; j++) {
				if (array[j] > array[j + 1]) {
					int temporary = array[j];
					array[j] = array[j + 1];
					array[j + 1] = temporary;

					hasSwapped = true;
				}
			}

if (hasSwapped == false) {
				break;
			}
		}
	}
}

เราได้ทำการเปลี่ยนแปลงสามครั้งในโค้ดของเรา ภายใน for loop แรกของเรา เราได้ประกาศตัวแปรที่เรียกว่า “hasSwapped” ตัวแปรนี้ติดตามว่ามีการแลกเปลี่ยนหรือไม่ โดยค่าเริ่มต้น ตัวแปรนี้ถูกตั้งค่าเป็น "เท็จ" หากมีการแลกเปลี่ยน ค่าของตัวแปรนี้จะถูกตั้งค่าเป็น "จริง"

ในตอนท้ายของ for loop เราได้เพิ่มคำสั่ง if เพื่อตรวจสอบว่า hasSwapped เท่ากับเท็จหรือไม่ หากไม่มีการแลกเปลี่ยนใด ๆ อาร์เรย์จะถูกจัดเรียง เราใช้คีย์เวิร์ด "break" เพื่อหยุดการทำงานของลูปของเราหาก hasSwapped มีค่าเท่ากับเท็จ

มารันโค้ดของเราโดยใช้โปรแกรมหลักที่เราเขียนไว้ก่อนหน้านี้และดูว่าเกิดอะไรขึ้น:

[2, 5, 7, 9]

รายการของเราได้รับการจัดเรียงแล้ว แต่คราวนี้อัลกอริทึมของเรามีประสิทธิภาพมากขึ้น หากเราใช้รายการที่ใหญ่กว่าโดยมีค่ามากกว่าในการจัดเรียง ประสิทธิภาพของอัลกอริธึมนี้จะชัดเจนยิ่งขึ้น เพียงเท่านี้ คุณได้เขียนการเรียงลำดับบับเบิลที่ปรับให้เหมาะสมใน Java!

บทสรุป

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

การจัดเรียงแบบบับเบิลมีสองประเภท:แบบมาตรฐานและแบบปรับให้เหมาะสม การเรียงลำดับแบบฟองมาตรฐานดำเนินการตามจำนวนครั้งของการแลกเปลี่ยนที่กำหนดไว้ล่วงหน้า ในขณะที่การเรียงลำดับแบบฟองที่ปรับให้เหมาะสมจะทำการเรียงลำดับจนกว่าจะมีการเรียงลำดับรายการเท่านั้น

ตอนนี้คุณพร้อมที่จะเริ่มเขียน Bubble sorts ใน Java อย่างผู้เชี่ยวชาญแล้ว!