最近研究了下冒泡排序
package com.study.ws.test;
import java.util.*;
public class MaoPao {
final static Set<Integer> a = new HashSet();
final static ArrayList<Integer> list = new ArrayList();
static{
final Random r = new Random( );
while(a.size()<10 ){
a.add(r.nextInt(20));
}
list.addAll(a);
Collections.shuffle(list);
}
System.out.println(list);
int size = list.size();
for (int i = 0; i < list.size(); i++) {
size--;
for (int j = 0; j < size; j++) {
int a = list.get(j);
int b = list.get(j+1);
if(a>b){
int big = a;
int small = b;
list.set(j, small);
list.set(j+1, big);
}
}
}
System.out.println(list);
}
所谓冒泡排序 意思是把最大的往上冒,接着第二大,第三大…
代码里有size–, 这里其实可以注释掉 然后第二层循环的循环总数 j<size变成 j<size-1 即可, 因为里边赋值的时候可能角标越界异常了,
这里的size-- 是一种 优化
看这张动图就明白为什么要size–, 因为后边的已经排序好了 你不size–也能完成排序,但是已经拍好了你还去比较不是浪费时间吗,
冒泡排序是把最大,第二大,第三大…依此往后排, 对应的最小的也在逐渐的往前挤, 看了这个动图理解了再去手写冒泡就很容易了