冒泡排序优化方案1:
public void sortIntegers(int[] A) {
for(int j=0;j<A.length-1;j++){
Boolean state=true;
for(int i=0;i<A.length-1-j;i++){
if(A[i]>A[i+1]){
int temp=A[i];
A[i]=A[i+1];
A[i+1]=temp;
state=false;
}
}
if(state){
break;
}
}
}
个人解题思路:
加入状态位state,当内部for循环里的 if(A[i]>A[i+1]) 一次也没有满足时,说明已经是有序的序列。
冒泡排序优化方案2:
public void sortIntegers(int[] A) {
int size=A.length-1,k=0;
for(int j=0;j<A.length-1;j++){
Boolean state=true;
for(int i=0;i<size;i++){
if(A[i]>A[i+1]){
int temp=A[i];
A[i]=A[i+1];
A[i+1]=temp;
k=i;
state=false;
}
}
size=k;
if(state){
break;
}
}
}
个人解题思路:
在优化方案1的基础上,对内部for循环继续优化,找出并记录 满足条件(if(A[i]>A[i+1]))最大值i,此处的“i”相当于一条分界线,序号在“i”之后的序列已经处于有序。
下一趟内部循环时的满足条件就为:i<上一步的最大值‘i’;为什么这里不需要用 <= 呢,也是因为if(A[i]>A[i+1])这个筛选条件的原因。
如果您有更好的解法,欢迎您在留言区补充,感谢!!