思路:
1.每一趟,交换相邻两个数,前一个数大的(小的)往后放,一趟下来,最大(小)的数放在了最后。
2.持续进行,直到所有的数都排序完。
3.优化:如果有一趟没有任何交换,说明已经排序完了。
for(int i=0;i<len;i++)
for(int j=0;j<len-i-1;j++):此处-i是因为最后的数已经放好了,-1是因为后面使用了a[j+1]避免越界。
public class BubbleSort { @Test public void test(){ int[] a = {1,2,5,8,3,4,6,9,7}; sort(a); System.out.println(Arrays.toString(a)); } public void sort(int[] a){ // 优化:使用boolean判断是否交换:如果一趟没有交换退出循环 boolean isChange = false; for(int i=0; i<a.length; i++){ isChange = false; for(int j=0; j<a.length-i-1; j++){ if(a[j]>a[j+1]){ a[j+1] += a[j]; a[j] = a[j+1]-a[j]; a[j+1] -= a[j]; isChange = true; } } // 没有改变顺序:退出即可 if(!isChange){ break; } } } }