JAVA基础--冒泡排序
冒泡排序(笔试题)
-
两次循环,外层冒泡轮数,里层依次比较
-
时间复杂度为O(n2)
-
过程:
- 比较数组中两个相邻的元素,如果第一个元素比第二个大,则交换它们的位置
- 每一次比较都会产生一个最大或者最小的数组,下一轮则可以少一个排序
- 依次循环,直到结束
public class BubbleSort {
public static void main(String[] args) {
//冒泡排序(升序:从小到大)
int[] nums = {2,4,1,3,5,9,6,7};
int temp = 0;//临时变量,用于交换
//输出排序前数组
System.out.println("排序前数组为:");
for (int i = 0; i < nums.length; i++) {
System.out.print(nums[i]+" ");
}
//两两比较
for (int i = 0; i < nums.length-1; i++) {
for (int j = 0; j < nums.length-1; j++) {
if(nums[j+1]<nums[j]){
//将比较小的数换到前面
temp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = temp;
}
}
}
//输出排序后数组
System.out.println();//换行
System.out.println("排序后数组为:");
for (int i = 0; i < nums.length; i++) {
System.out.print(nums[i]+" ");
}
}
}
运行结果为:
编写一个冒泡排序的方法
import java.util.Arrays;
public class BubbleSort {
public static void main(String[] args) {
int[] nums = {2,4,1,3,5,9,6,7};
int[] nums_2 = bubSort(nums);//调用方法
//输出排序后数组
System.out.println("排序后数组为:");
System.out.println(Arrays.toString(nums_2));
}
//冒泡排序的方法(升序)
public static int[] bubSort(int[] arr){
int temp = 0;
//两两比较
for (int i = 0; i < arr.length-1; i++) {
for (int j = 0; j < arr.length-1; j++) {
if(arr[j+1]<arr[j]){
//将比较小的数换到前面
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
return arr;
}
}
优化
减少比较次数
import java.util.Arrays;
public class BubbleSort {
public static void main(String[] args) {
int[] nums = {2,4,1,3,5,9,6,7};
int[] nums_2 = bubSort(nums);
//输出排序后数组
System.out.println("排序后数组为:");
System.out.println(Arrays.toString(nums_2));
}
//冒泡排序的方法(升序)
public static int[] bubSort(int[] arr){
int temp = 0;
//两两比较
for (int i = 0; i < arr.length-1; i++) {
boolean flag = false;//用于标记是否发生了交换
for (int j = 0; j < arr.length-1; j++) {
if(arr[j+1]<arr[j]){
//将比较小的数换到前面
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
flag = true;
}
}
if(flag == false){
//如果没有发生交换则表示已经排序完成,不需要再继续循环比较
break;
}
}
return arr;
}
}