冒泡排序
思想:
冒泡排序(Bubble Sort)的基本思想是,通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,如果发现逆序则交换,数值较大的元素逐渐从前面移动到后面。
冒泡排序图解:
代码:
import java.util.Arrays;
/**
* Created with InteIIiJ IDEA.
* Description:
* User:
* Date:2019-07-23
* Time:0:23
*/
public class BubbleSort {
public static void bubbleSort(int[]array){
int tmp = 0;
for (int i = 0; i < array.length-1; i++) {
for (int j = 0; j < array.length - 1 - i; j++) {
if(array[j]>array[j+1]){
tmp = array[j];
array[j] = array[j+1];
array[j+1] = tmp;
}
}
}
}
public static void main(String[] args) {
int []array = {25,6,56,24,9,12,55};
System.out.println("排序前:");
System.out.println(Arrays.toString(array));
bubbleSort(array);
System.out.println("排序后:");
System.out.println(Arrays.toString(array));
}
}
运行结果:
排序前:
[25, 6, 56, 24, 9, 12, 55]
排序后:
[6, 9, 12, 24, 25, 55, 56]
冒泡排序的特性总结:
- 时间复杂度:O(N^2)
- 空间复杂度:O(1)
- 稳定性:稳定
冒泡排序的优化:
因为在排序的过程中,各元素不断接近自己的位置,如果下一趟比较没有进行过交换,就说明序列已经有序了,因此在排序过程中设置一个标志flag判断元素是否进行过交换,从而减少不必要的比较。
优化代码:
import java.util.Arrays;
/**
* Created with InteIIiJ IDEA.
* Description:
* User:
* Date:2019-07-23
* Time:0:23
*/
public class BubbleSort {
public static void bubbleSort(int[]array){
int tmp = 0;
boolean flag = false;//设置标识,表示是否进行过交换
for (int i = 0; i < array.length-1; i++) {
for (int j = 0; j < array.length - 1 - i; j++) {
flag = true;//如果代码运行到此处,说明有发生交换
if(array[j]>array[j+1]){
tmp = array[j];
array[j] = array[j+1];
array[j+1] = tmp;
}
}
if(!flag){//表示在一趟排序中没有发生交换
break;
}else {
flag = false;//发生交换,重置flag,进行下一次判断。
}
}
}
public static void main(String[] args) {
int []array = {25,6,56,24,9,12,55};
System.out.println("排序前:");
System.out.println(Arrays.toString(array));
bubbleSort(array);
System.out.println("排序后:");
System.out.println(Arrays.toString(array));
}
}
运行结果:
排序前:
[25, 6, 56, 24, 9, 12, 55]
排序后:
[6, 9, 12, 24, 25, 55, 56]
祝好!!!