1.冒泡排序原理
比较相邻的元素,如果第一个比第二大就交换位置。每一对相邻元素都这样做,从开始一对到最后一对,这样最大元素就会排在最后,重复这个过程直到排完。
2.算法特点
2.1 时间复杂度
if序列是正序,则需要比较N-1(N为序列个数),移动0次,时间复杂度为O(n),这种是最好的情况;
if序列是反序,则需要比较N-1次,每次需要进行N-i次比较,移动N-i次,时间复杂度为O(n*n);
3.eg:
int[] a={5,9,2,6,4,1}
第一次排序:
1.:比较5与9,5小于9,不交换位置 :5,9,2,6,4,1
2:比较9与2,9大于2,交换位置:5,2,9,6,4,1
3:比较9与6,9大于6,交换位置:5,2,6,9,4,1
4:比较9与4,9大于4,交换位置:5,2,6,4,9,1
5:比较9与1,9大于1,交换位置:5,2,6,4,1,9
第一次排序比较5次,找到最大的数,放在末尾,排序结果为5,2,6,4,1,9
第二次排序:
1: 比较5与2,5大于2,交换位置:2,5,6,4,1,9
2: 比较5与6,5小于6,不交换位置:2,5,6,4,1,9
3:比较6与4,6大于4,交换位置:2,5,4,6,1,9
4:比较6与1,6大于1,交换位置:2,5,4,1,6,9
第二次排序比较4次,找到第二大的数,排序结果为2,5,4,1,6,9
第三次排序:
1:比较2与5,2小于5,不交换位置:2,5,4,1,6,9
2:比较5与4,5大于4,交换位置:2,4,5,1,6,9
3:比较5与1,5大于1,交换位置:2,4,1,5,6,9,
第三次排序比较3次,排序结果为2,4,1,5,6,9
第四次排序:
1:比较2与4,2小于4,不交换位置:2,4,1,5,6,9
2:比较4与1,4大于1,交换位置:2,1,4,5,6,9
第四次排序比较两次,排序结果为2,1,4,5,6,9
第五次排序:
1:比较2与1,2大于1,交换位置:1,2,4,5,6,9
第五次排序比较一次,排序结果为1,2,4,5,6,9
4.代码展示
可以由上面列子看出,一共进行了N-1次排序,进行过N-i次比较
public static void bSort(int[] arr){
if(arr==null||arr.length<2){
return;
}
for(int end=arr.length-1;end>0;end--){
for(int i=0;i<end;i++){
if(arr[i]>arr[i+1]){
int temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}
}
}
外循环为排序次数,内循环为比较次数;