冒泡排序是一种排序算法,它比较两个相邻的元素并将它们交换,直到它们不符合预期的顺序。
就像水中上升到水面的气泡的运动一样,阵列的每个元素在每次迭代中都会移动到最后。因此,它被称为冒泡排序。
一、冒泡排序的工作原理
假设我们试图按升序对数组中的元素进行排序。
(一) 第一次迭代(比较和交换)
- 从第一个索引开始,比较第一个和第二个元素。
- 如果第一个元素大于第二个元素,则交换它们。
- 现在,比较第二个和第三个元素。如果它们不按顺序交换它们。
- 上述过程一直持续到最后一个元素。
(二)剩余迭代
其余迭代继续进行相同的过程。
每次迭代后,未排序元素中最大的元素放在最后。
在每次迭代中,比较都会进行到最后一个未排序的元素。
当所有未排序的元素都放在正确的位置时,数组就会被排序。
JAVA 代码实现
importjava.util.Arrays; classMain { // perform the bubble sortstaticvoidbubbleSort(intarray[]) { intsize=array.length; // loop to access each array elementfor (inti=0; i<size-1; i++) // loop to compare array elementsfor (intj=0; j<size-i-1; j++) // compare two adjacent elements// change > to < to sort in descending orderif (array[j] >array[j+1]) { // swapping occurs if elements// are not in the intended orderinttemp=array[j]; array[j] =array[j+1]; array[j+1] =temp; } } publicstaticvoidmain(Stringargs[]) { int[] data= { -2, 45, 0, 11, -9 }; // call method using class nameMain.bubbleSort(data); System.out.println(Arrays.toString(data)); } }
(三)优化的冒泡排序算法
在上述算法中,即使数组已经排序,也会进行所有比较。这增加了程序的执行时间。
要解决此问题,我们可以增加一个额外的变量。如果出现元素的交换,则交换的值设置为true。否则,它设置为false。迭代后,如果没有交换,则交换的值将为假。这意味着元素已经排序,并且不需要执行进一步的迭代。这将减少执行时间并有助于优化泡沫排序。
优化后的实现
importjava.util.Arrays; classMain { // perform the bubble sortstaticvoidbubbleSort(intarray[]) { intsize=array.length; // loop to access each array elementfor (inti=0; i< (size-1); i++) { // check if swapping occursbooleanswapped=false; // loop to compare adjacent elementsfor (intj=0; j< (size-i-1); j++) { // compare two array elements// change > to < to sort in descending orderif (array[j] >array[j+1]) { // swapping occurs if elements// are not in the intended orderinttemp=array[j]; array[j] =array[j+1]; array[j+1] =temp; swapped=true; } } // no swapping means the array is already sorted// so no need for further comparisonif (!swapped) break; } } publicstaticvoidmain(Stringargs[]) { int[] data= { -2, 45, 0, 11, -9 }; // call method using the class nameMain.bubbleSort(data); System.out.println("Sorted Array in Ascending Order:"); System.out.println(Arrays.toString(data)); } }