本文主要讲解排序算法中最简单的冒泡排序算法,希望你们会喜欢。
属于 内排序算法中 的 交换排序类别
较大的数往下沉,较小的数类似气泡一样往上冒,故称:冒泡排序
整个过程就跟冒泡一样,最小值一直往上“冒泡”,具体如下:
a. 2与6对比:因2<6,所以交换位置
b. 2与4对比:因2<4,所以交换位置
c. 2与7对比:因2<7,所以交换位置
以此类推,最终将序列中最小值放到了首位(冒上来了)
具体请看注释
public class BubbleSort {
/**
* 基本的 冒泡排序
*/
public static void bubbleSort(int[] srcArray) {
int i,j; // 用于存放数组下标
int temp = 0; // 用于交换数值时临时存放值
for(i=0;i<srcArray.length-1;i++){
// j 从后往前循环
for(j=srcArray.length-2;j>=i;j--){
// 若前者>后者,则交换位置
if(srcArray[j]>srcArray[j+1]){
temp=srcArray[j];
srcArray[j]=srcArray[j+1];
srcArray[j+1]=temp;
}
}
}
// 输出排序后的序列
for(int a =0;a<srcArray.length;a++)
System.out.println(srcArray[a]);
}
/**
* 执行 冒泡排序
*/
public static void main(String[] args) {
// 定义待排序数列
int[] src = new int[]{9, 1, 5, 8, 3, 7, 4, 2, 6};
// 输出结果
bubbleSort(src);
}
}
1
2
3
4
5
6
7
8
9
Demo
地址
Carson_Ho的Github地址:冒泡排序public class BubbleSort {
/**
* 优化的 冒泡排序
*/
public static void bubbleSortOpti(int[] srcArray) {
int i,j; // 用于存放数组下标
int temp = 0; // 用于交换数值时临时存放值
// 标记位
// flag = true:代表存在数据交换,即序列仍需排序,需继续循环
// flag = false:代表不存在数据交换,即序列不需排序,已经是有序序列了,可停止循环
Boolean flag = true;
// 若flag = false时退出循环
for(i=0;i<srcArray.length-1 && flag;i++){
flag = false; // 初始化为false
// j 从后往前循环
for(j=srcArray.length-2;j>=i;j--){
// 若前者>后者,则交换位置
if(srcArray[j]>srcArray[j+1]){
temp=srcArray[j];
srcArray[j]=srcArray[j+1];
srcArray[j+1]=temp;
flag = true; // 若有数据交换,则说明序列仍未无序
}
}
}
// 输出排序后的序列
for(int a =0;a<srcArray.length;a++)
System.out.println(srcArray[a]);
}
/**
* 执行 优化后的冒泡排序
*/
public static void main(String[] args) {
// 定义待排序数列
int[] src = new int[]{2, 1, 3, 4, 5, 6, 7, 8, 9};
// 输出结果
bubbleSortOpti(src);
}
}
以下将分析算法的性能:时间复杂度、空间复杂度、稳定性