数据结构与算法:冒泡排序

开发 前端
按照冒泡排序的思想,我们要把相邻的元素两两比较,当一个元素大于右侧相邻元素时,交换它们的位 置;当一个元素小于或等于右侧相邻元素时,位置不变。

一、定义

冒泡排序是最基础的排序算法。

冒泡排序的英文是bubble sort,它是一种基础的交换排序。

冒泡排序这种排序算法的每一个元素都可以像小气泡一样,根据自身大小,一点一点地向着数组的一侧移动。

二、思路

按照冒泡排序的思想,我们要把相邻的元素两两比较,当一个元素大于右侧相邻元素时,交换它们的位 置;当一个元素小于或等于右侧相邻元素时,位置不变。

经过第一轮后: 元素9作为数列中最大的元素,就像是汽水里的小气泡一样,“漂”到了最右侧。

每一轮结束都会有一个元素被移到最右侧。

三、实现

1、冒泡算法

public static void main(String[] args) {
int[] array = {1,6,2,5,3,0,3,5,4};
array = bubbleSortBySortedExchanged(array);
for(int i =0 ; i < array.length; i++){
System.out.println(array[i]);
}

}

public static int[] bubbleSort(int[] array){
//有array.length-1个数字需要交换
for(int i = 0; i < array.length - 1; i++){
//每个数字比较的次数是array.length-1-i
for(int j = 0; j < array.length - 1 - i; j++){
//如果当前值大于后一个值,则将更大的值移到后一位
if(array[j] > array[j+1]){
swap(array[j],array[j+1]);
}
}
}
return array;
}

//互相交换值
public static void swap(int a,int b){
int temp = a;
a = b;
b = temp;
}

2、冒泡算法优化

(1)外层优化

第6轮已经可以结束了,也就是如果不需要交换了,则说明已经排好序了

思路:在外层循环处,设置标志isSort,默认为排好,如果不交换则跳出本次循环

(2)内部优化

已经被移到右侧的元素不用再参与比较了

思路:设置lastExchangeIndex标志单轮比较中最后一次比较的数值下标,下一轮比较就以lastExchangeIndex结束。

private static  int[] bubbleSortBySortedExchanged(int[] array){
if(array == null || array.length < 2){
return array;
}
//单轮比较中最后一次交换的数值下标
int lastExchangeIndex = 0;
int sortBorder = array.length - 1;
//不交换则表示已排好
boolean isSorted = true;
for(int i = 0 ;i < array.length - 1; i++){
for(int j = 0; j < sortBorder ; j++){
if(array[j] > array[j+1]){
isSorted = false;
int temp = array[j+1];
array[j+1] = array[j];
array[j] = temp;
lastExchangeIndex = j;
}
}
sortBorder = lastExchangeIndex;
if(isSorted){
break;
}
}
return array;
}

四、复杂度

时间复杂度:O( n的2次方 )

空间复杂度:O(1),也就是原地排序

稳定性:相等元素之间原有的先后顺序不变,也就是稳定排序

责任编辑:武晓燕 来源: 今日头条
相关推荐

2023-03-06 08:10:52

数据结构算法数据

2023-03-10 08:07:39

数据结构算法计数排序

2023-03-07 08:02:07

数据结构算法数列

2023-04-27 09:13:20

排序算法数据结构

2023-03-13 10:08:31

数据结构算法

2019-03-29 09:40:38

数据结构算法前端

2021-03-23 08:33:22

Java数据结构算法

2021-07-16 04:57:45

Go算法结构

2021-04-15 09:36:44

Java数据结构算法

2020-10-21 14:57:04

数据结构算法图形

2023-03-08 08:03:09

数据结构算法归并排序

2021-04-16 09:40:52

Java数据结构算法

2009-08-03 17:38:12

排序算法C#数据结构

2021-04-22 10:07:45

Java数据结构算法

2023-10-27 07:04:20

2021-10-18 11:29:48

奇偶排序数组数据结构算法

2017-08-31 09:45:43

JavaArrayList数据

2023-09-15 10:33:41

算法数据结构

2023-11-06 06:43:23

单链表查询数据结构

2023-02-08 07:52:36

跳跃表数据结构
点赞
收藏

51CTO技术栈公众号