本篇介绍冒泡排序,如果你需要了解其他排序算法,请点击下面链接查看!!!
这里以数组 arr={10,5,8,4,9,3} 为例
第一趟排序
//第一趟排序
for(int i=0;i<arr.length-1;i++) {
if(arr[i]>arr[i+1]) {
int temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}
第一趟排序之后arr数组中的数据顺序为 arr={5,8,4,9,3,10 }
第二趟排序
//第二趟排序
for(int i=0;i<arr.length-1-1;i++) {
if(arr[i]>arr[i+1]) {
int temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}
第一趟排序后,最后一项已经是最大值,第二趟排序时只需要对前n-1项进行排序,得到arr数组中的数据顺序为 arr={5,4,8,3,9,10 }
第三趟排序
//第三趟排序
for(int i=0;i<arr.length-1-1-1;i++) {
if(arr[i]>arr[i+1]) {
int temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}
第二趟排序后,后两项已经排好序,第三趟对前n-2项排序之后arr数组中的数据顺序为 arr={4,5,3,8,9,10}
第n-1趟排序
//第n-1趟排序
for(int i=0;i<arr.length-1-1-1-1-1;i++) {
if(arr[i]>arr[i+1]) {
int temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}
第n-1趟排序之后arr数组中的数据顺序为 arr={3,4,5,8,9,10},此时数组中只有一个数据没有排序,即使最小值,无需再排序。
由以上步骤我们发现,每次排序的过程有很多重复,可以使用循环来解决,因此得到最终的排序代码如下:
for(int i=0;i<arr.length-1;i++) {
for(int j=0;j<arr.length-1-i;j++) {
if(arr[j]>arr[j+1]) {
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
对于数组 arr={10,5,8,4,9,3},运行结果: