01 算法-初识算法-冒泡排序
2019-05-22 本文已影响0人
花神子
冒个泡
什么是冒泡排序?
冒泡排序的英文Bubble Sort,是一种最基础的交换排序。
按照冒泡排序的思想,要把相邻的元素两两比较,根据大小来交换元素的位置,过程如下:
algorithm-Bubble-Sort-1.png algorithm-Bubble-Sort-2.png algorithm-Bubble-Sort-3.png代码实现:
双层for循环
- 外部循环控制所有的回合,内部循环代表每一轮的冒泡处理,先进行元素比较,再进行元素交换。
分析性能:
其实根据视图可以看出,我们在进行第六次循环的时候数组已经是一个有序数组了,但是代码依旧会执行完第七次和第八次;这种情况下,进行判断出数列是否已经有序,并且做出标记,剩下的几轮排序就可以不必执行,提早结束工作。
/**
* @author maozhengwei
* @version V1.0.0
* @description
* @data 2019-05-22 17:18
* @see
**/
public class BubbleSort {
private static void sort(int array[]) {
for( int i = 0; i < array.length; i++) {
for(int j = 0; j < array.length - i - 1; j++) {
if(array[j] > array[j + 1]) {
int tmp = array[j];
array[j] = array[j +1];
array[j +1] = tmp;
}
}
}
}
public static void main( String [] args) {
int[] array = new int[] { 5 , 8 , 6 , 3 , 9 , 2 , 1 , 7 };
sort(array);
System.out.println(Arrays.toString(array));
}
}
双层for循环 优化1
进行标志位标志本轮循环是否存在元素交换位置,如果没有交换则说明数据已经有序,则退出;
/**
* @author maozhengwei
* @version V1.0.0
* @description
* @data 2019-05-22 17:18
* @see
**/
public class BubbleSort2 {
private static void sort(int array[]) {
for( int i = 0; i < array.length; i++) {
//进行循环标记,记录每一轮是否发生变化,存在则继续,如果不进行交互则停止
boolean flag = false;
for(int j = 0; j < array.length - i - 1; j++) {
if(array[j] > array[j + 1]) {
//进行元素交换
flag = true;
int tmp = array[j];
array[j] = array[j +1];
array[j +1] = tmp;
}
}
if (!flag) {
break;
}
}
}
public static void main( String [] args) {
int[] array = new int[] { 5 , 8 , 6 , 3 , 9 , 2 , 1 , 7 };
sort(array);
System.out.println(Arrays.toString(array));
}
}