大家好,欢迎来到IT知识分享网。
在操作数组时,经常需要对数组中的元素进行排序。接下来介绍一种非常常见的排序算法–冒泡排序。
在冒泡排序的过程中,不断地比较数组中相邻的元素,较小者向上浮,较大者向下沉,整个过程和水中气泡上升的原理相似,故称之为冒泡排序。
原理
第一步,从第一个元素开始,将相邻的两个元素进行比较,直到最后两个元素完成比较。如果前面的元素比后面的元素大,则交换它们的位置。整个过程完成后,数组中最后一个元素自然就是最大值,这样也就完成了第一趟的比较。
第二步,除了最后一个元素,将剩余的元素按照第一步的方法进行两两比较,这样就可以将数组中第二大的元素放到倒数第二个位置上。
第三步,以此类推,持续对越来越少的元素重复上面的步骤,直到没有任何一对元素需要比较为止。
总体而言,在冒泡排序中,程序的时间复杂度和空间复杂度随着程序的执行,均呈现递减趋势。
代码
public class Example32{
public static void main(String[] args){
int[] arr={9, 8, 3, 5, 2};
System.out.print("冒泡排序前:");
printArray(arr); // 打印排序前的数组元素
bubbleSort(arr); // 调用排序方法
System.out.print("冒泡排序后:");
printArray(arr); // 打印排序后的数组元素
}
// 定义打印数组方法
public static void printArray(int[] arr){
for(int i=0; i<arr.length; i++){ // 从第一个数组元素开始遍历数组元素
System.out.print(arr[i]+" "); // 输出数组元素,并加空格以控制格式
}
System.out.print("\n"); // 完成一次调用后换行
}
// 定义冒泡排序方法
public static void bubbleSort(int[] arr){
for(int i=0; i<arr.length -1; i++){ // 外层循环,控制总共需要比较的趟数
for(int j=0; j<arr.length -i -1; j++){ // 内层循环,控制每趟需要比较的次数
if(arr[j] > arr[j+1]){ // 比较相邻元素
// 以下三行代码用于交换两个元素
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
System.out.print("第"+(i+1)+"轮排序后:"); // 每趟执行完后,输出提示信息
printArray(arr); // 输出本趟执行后的结果
}
}
}
结果
分析
bubbleSort()方法通过一个嵌套for循环实现了冒泡排序。
其中外层循环用来控制比较的趟数,即【数组元素的个数-1】,每一趟比较,都可以确定一个元素的位置,由于最后一个元素不需要比较,因此外层循环的次数为【arr.length-1】。
内层循环用于控制每趟比较的次数,由于变量i在循环的过程中是自增的,因此程序每执行一趟,每次比较的次数递减。
每次比较的过程中,如果前者小于后者,则交换两个元素的位置。
在第一轮比较中,第一个元素【9】为最大值,因此它在每次比较时都会发生位置的交换,直到被放到最后一个位置。第二轮比较中,元素【8】为第二大值,比较过程和第一轮比较类似,直到被放到倒数第二个位置。循环第三轮和第四轮比较,第四轮比较完成后,数组元素已经完成了排序。
其交换过程,类似于A杯子装了可乐,B杯子装了雪碧,现在需要把A杯子的可乐和B杯子的雪碧互换,因此需要拿出C杯子(即临时变量temp)。把B杯子的雪碧倒入C杯子,此时B杯子为空杯;把A杯子的可乐倒入B杯子,此时A杯子为空杯;再将C杯子的雪碧倒入A杯子;此时C杯子为空杯,A杯子为雪碧,B杯子为可乐,即完成了可乐和雪碧的互换。
图例
引用
参考项 | 地址 |
---|---|
文中GIF图片引用 | https://blog.csdn.net/hcz666/article/details/117810787 |
<- 完 ->
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/27814.html