冒泡排序
对要进行排序的数据中相邻的数据进行两两比较,将小数放在前面,将较大的数据放在后面,依次对所有的数据进行操作,直至所有数据按要求完成排序。
public class Main {
public static void main(String[] args) {
int[] arr={15,18,55,21,36,12};
System.out.println("排序前:");
for (int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
//冒泡排序算法
int count=0;//用于计数,记录交换次数
int temp=0;//用于交换
for (int j=0;j<arr.length-1;j++){
boolean flag=false; //立一个标准
for(int i=arr.length-1;i>0;i--) {
if (arr[i] < arr[i - 1]) {
temp = arr[i];
arr[i] = arr[i - 1];
arr[i - 1] = temp;
flag=true; //判断是否发生交换
}
count++;//每交换一次+1
}
}
System.out.println();
System.out.println("排序后:");
for (int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
System.out.println();
System.out.println("总共交换了"+count+"次");
}
}
排序前:
15 18 55 21 36 12
排序后:
12 15 18 21 36 55
总共交换了25次
但是这样的时间复杂度很高,因为每次循环排没排序好都会从头到尾进行两两比较
当一次比较完之后没有进行交换,说明当前的数已经排序好了,我们可以跳过当前循环到下一次循环,节省时间提高效率
public class Main {
public static void main(String[] args) {
int[] arr={15,18,55,21,36,12};
System.out.println("排序前:");
for (int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
//冒泡排序算法
int count=0;//用于计数,记录交换次数
int temp=0;//用于交换
for (int j=0;j<arr.length-1;j++){
boolean flag=false; //立一个标准
for(int i=arr.length-1;i>0;i--) {
if (arr[i] < arr[i - 1]) {
temp = arr[i];
arr[i] = arr[i - 1];
arr[i - 1] = temp;
flag=true; //判断是否发生交换
}
if (!flag){ //如果没有发生交换则结束当前循环
continue;
}
count++;//每交换一次+1
}
}
System.out.println();
System.out.println("排序后:");
for (int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
System.out.println();
System.out.println("总共交换了"+count+"次");
}
}
排序前:
15 18 55 21 36 12
排序后:
12 15 18 21 36 55
总共交换了14次