第一趟
:从数组的最后一个元素和倒数第二个元素比较,小的上浮(交换),之后倒数第二个和倒数第三个数字比较,小的上浮(交换),直至第二个数字和第一个数字比较,小的上浮,那么经过一趟排序之后,此时的第一个元素就是最小的第二趟
: 经过第一趟之后,第一个就是最小的数字,因此第二趟就不比较第一个和第二个数字了。从最后一个元素和倒数第二个元素比较,小的上浮,直至第三个元素和第二个元素比较,小的上浮,那么此时的第二个就是仅次于第一个的小的元素第三趟
:和前面一样的比较,不过就是不用比较第二个和第三个元素了,因为经过第一趟和第二趟之后,数组中的第一个和第二个元素已经是最小的两个了。经过第三趟比较,第三个元素是仅次于第一个和第二个元素小的元素第四趟
,第五趟
………………………………n
个元素,那么需要经过n-1
趟排序才可以完成全部的比较,最后一趟可以比较出倒数第一个和倒数第二个元素的大小/**
* 冒泡排序算法之从后向前比较排序
* @param a 需要排序的数组
*/
public static void bubbleSort(int[] a) {
// 外层循环控制排序的趟数,总共需要n-1趟排序
for (int i = 0; i < a.length - 1; i++) {
//内层循环控制的是每一趟排序需要比较的次数,j=a.length-1 表示从最后一个元素开始比较,j>i是用于控制每趟之后比较的次数
//比如,经过第一趟之后,那么第一个元素肯定是最小的,因此就不需要将第二个元素和其比较了,第二趟之后第二个元素第一个和第二个元素就是最小的,都需要比较了
for(int j=a.length-1;j>i;j--){
//比较大小,较小的就上浮
if(a[j]<a[j-1]){
//交换位置
int temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
}
}
}
}
第一趟
:从第一个元素和第二个元素进行比较,较大的下沉(交换),然后第二个元素和第三个元素比较,较大的下沉,直至倒数第二个和最后一个比较,大的下沉,那么此时的最后一个数就是最大的第二趟
: 从第一个元素和第二个元素进行比较,较大的下沉,然后第二个和第三个比较,直至倒数第三个和倒数第二个比较,大的下沉,那么此时的倒数第二个数是仅次于最后一个数小的元素。因为经过第一趟
之后,最后一个元素已经是最大的,因此不需要比较了第三趟
: 经过第二趟之后,倒数第二个仅次于最后一个元素小的元素了,因此在第三趟中只需要比较到倒数第四个和倒数第三个元素的大小即可,大的下沉,那么此时的倒数第三个元素又是前面所有元素中最大的,因此在第四趟排序就不需要和其比较了。第四趟
……………………………………………………n
个元素,那么总共需要进行n-1
趟排序/**
* 冒泡排序算法之从前向后比较排序
* @param a 需要排序的数组
*/
public static void bubbleSort(int[] a) {
// 外层循环控制排序的趟数,总共需要n-1趟排序
for (int i = 0; i < a.length - 1; i++) {
//内层循环控制每趟循环比较的次数,j=0表示从第一个元素开始进行比较,j<a.length-1-i用来控制每趟循环之后不用再比较的元素索引
//比如第一趟循环之后,最后一个元素就是最大的,那么在第二趟循环就不需要和其比较了
for (int j = 0; j < a.length - 1 - i; j++) {
//相邻的元素进行比较,如果前面的大于后面的就交换位置
if (a[j] > a[j + 1]) {
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}