标签:原理 string 元素 ble 最大数 boolean false 有序 没有
?
? ps:这是一个循环的实现情况。
import java.util.Arrays;
public class BubbleSort {
public static void main(String[] args){
int[] arr={10,30,25,58,45,74};
int temp = 0;
for (int i = 0; i < arr.length-1; i++ ){
//arr.length -1-i 是为了减少循环次数,已经排好序的数据不需要再次比较。
for (int j = 0; j < arr.length-1-i; j++) {
if (arr[j] > arr[j+1]) {
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
}
优点:代码简单,易于理解,空间复杂度低,属于稳定排序。
缺点:不管数据是否有序,都会进行固定次数的排序操作,效率不高,时间复杂度:
交换数据的代码执行次数 T(n) = 1+2+....+(n-1) = (1+n-1)*(n-1)/2 = (n^2 - n)/2
所以最坏情况:T(n) = O(f(n)) = O(n^2)
import java.util.Arrays;
public class BubbleSort {
public static void main(String[] args){
int[] arr={1,3,5,8,45,74};
int temp = 0;
boolean flag = true;
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]) {
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
flag = false;
}
}
if (flag){
break;
}else {
flag = true;
}
}
System.out.println(Arrays.toString(arr));
}
}
加入一个flag变量作为岗哨,探测有没有发生数据交换,如果某一次循环的时候没有发生数据交换,那么就说明数组已经是有序的了,就不再继续执行循环。
标签:原理 string 元素 ble 最大数 boolean false 有序 没有
原文地址:https://www.cnblogs.com/coding-996/p/12268164.html