1. 冒泡排序算法
将元素两两进行比较,大的置后,小的置前。
示例:现有一个数组{5,4,3,2,1}
排序次数 | 排序结果 | 比较次数 |
---|---|---|
原始数组 | 5,4,3,2,1 | 0 |
第一轮排序后 | 4,3,2,1,5 | 4 |
第二轮排序后 | 3,2,1,4,5 | 3 |
第三轮排序后 | 2,1,3,4,5 | 2 |
第四轮排序后 | 1,2,3,4,5 | 1 |
通过上例可以总结出,经过每次排序后都会产生一个较大值,由此向前递进,直至排序完成,因此每一次排序产生的最大值可以不必参与到下一次的排序中。由此可以总结出,有n个元素进行冒泡排序,一共需要n-1轮排序,每一轮需要比较的次数为n-i次。
package algotithm;
import java.util.Arrays;
//冒泡排序算法
public class bubbleSort {
public static void Bubble(int sort[]) {
/**
* 3个元素
* 原始数据: 3 2 1
* 第一轮排序后:2 1 3,交换2次元素
* 第二轮排序后:1 2 3,交换1次元素
* N个数字要排序完成,总共进行N-1趟排序,每i趟的排序次数为(N-i)次
* 每进行一趟排序都会找出一个较大值
* 冒泡排序最好的时间复杂度为O(n)
* 冒泡排序总的平均时间复杂度为:O(n^2)
* **/
//判断边界条件
if (sort == null || sort.length < 2) {
return;
}
for (int i = 0; i < sort.length - 1; i++) {//交换轮次
for (int j = 0; j < sort.length - 1 -i; j++) {//交换次数
if (sort[j] > sort[j + 1]) {
int temp = sort[j];
sort[j] = sort[j+1];
sort[j+1] = temp;
}
}
}
}
public static void main(String[] args) {
int[] sort = {9,8,7,6,5,4,3,2,1,0};
//int[] sort = {2};
Bubble(sort);
System.out.println(Arrays.toString(sort));
}
}