什么是排序算法
冒泡排序
简单来说就是两两进行比较,每一趟都将最大的放在前面,总共进行数组大小-1次排序,每一趟排序的次数在逐渐的减少
冒泡排序代码实现
public class BubbleSort {
public static void main(String[] args) {
int arr[] = {3,9,-1,10,-2};
//第一次排序,把第一大的排在最后
/* int temp = 0;
for (int i = 0;i < arr.length-1;i++){
if (arr[i] > arr[i+1]){
temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
System.out.println("第一次排序后的数组");
System.out.println(Arrays.toString(arr));*/
//第二次排序
//只需将长度减一即可,所以总结用一个双重for循环即可
int t = 0;
for (int j = 0;j < arr.length-1;j++){
for (int i = 0;i < arr.length-1-j;i++){
if (arr[i] > arr[i+1]){
t = arr[i];
arr[i] = arr[i+1];
arr[i+1] = t;
}
}
System.out.println("排序的结果为");
System.out.println(Arrays.toString(arr));
}
}
}
加入标识变量优化
int t = 0;
boolean flag = false;//判断是否交换的变量
for (int j = 0;j < arr.length-1;j++){
for (int i = 0;i < arr.length-1-j;i++){
if (arr[i] > arr[i+1]){
flag = true;//此时说明进行了交换
t = arr[i];
arr[i] = arr[i+1];
arr[i+1] = t;
}
if (!flag){//若为false则说明没进行交换就退出
break;
}else {
flag = false;//将其赋初值
}
}
}
System.out.println("排序的结果为");
System.out.println(Arrays.toString(arr));
缺点
- 冒泡排序的时间复杂度为O(n^2),在数据量较大时效率较低。
- 冒泡排序是一种稳定排序算法,但是对于大规模数据排序时,可能需要进行大量的比较和交换操作,造成性能上的浪费。
今日到此为止