当前位置:网站首页>【21天学习挑战赛】冒泡排序与插入排序
【21天学习挑战赛】冒泡排序与插入排序
2022-08-02 20:03:00 【小卢要刷力扣题】
冒泡排序
冒泡排序的英文Bubble Sort,是一种最基础的交换排序。之所以叫做冒泡排序,因为每一个元素都可以像小气泡一样,根据自身大小一点一点向数组的一侧移动。
冒泡排序的步骤
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

代码
public static void bubbleSort(int[] arr) {
if (arr == null || arr.length < 2) {
return;
}
// 0 ~ N-1
// 0 ~ N-2
// 0 ~ N-3
for (int e = arr.length - 1; e > 0; e--) {
// 0 ~ e
for (int i = 0; i < e; i++) {
if (arr[i] > arr[i + 1]) {
swap(arr, i, i + 1);
}
}
}
}
// 交换arr的i和j位置上的值
public static void swap(int[] arr, int i, int j) {
arr[i] = arr[i] ^ arr[j];
arr[j] = arr[i] ^ arr[j];
arr[i] = arr[i] ^ arr[j];
}
时间复杂度分析
因为有比较和交换行为,最差的情况就是每个元素从头交换到尾
例如[9,8,7,6,5,4,3,2,1,0]
因此时间复杂度为O(n2)
插入排序
插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
在生活中,最简单的例子就是扑克牌的排序了,
在排序扑克牌的时候,我们会把小的排插入到前面
只要会了如何排序扑克牌,那么就可以很快的理解插入排序了
代码
public static void insertionSort(int[] arr) {
if (arr == null || arr.length < 2) {
return;
}
// 不只1个数
for (int i = 1; i < arr.length; i++) {
// 0 ~ i 做到有序
for (int j = i - 1; j >= 0 && arr[j] > arr[j + 1]; j--) {
swap(arr, j, j + 1);
}
}
}
public static void swap(int[] arr, int i, int j) {
arr[i] = arr[i] ^ arr[j];
arr[j] = arr[i] ^ arr[j];
arr[i] = arr[i] ^ arr[j];
}
时间复杂度
最差情况为每次小的元素都要从最后插到最前面
例如[9,8,7,6,5,4,3,2,1]
因此时间复杂度为O(n2)
边栏推荐
猜你喜欢

ECCV 2022 | 通往数据高效的Transformer目标检测器
Solve the docker mysql can't write Chinese

.NET性能优化-你应该为集合类型设置初始大小

4 kmiles join YiSheng group, with more strong ability of digital business, accelerate China's cross-border electricity full domain full growth

PG 之 SQL执行计划
![LeetCode 622 设计循环队列[数组 队列] HERODING的LeetCode之路](/img/dc/ba5a0c3f6a58283d79c5916376e49e.png)
LeetCode 622 设计循环队列[数组 队列] HERODING的LeetCode之路

SQL 嵌套 N 层太长太难写怎么办?

J9数字论:互联网跨链桥有什么作用呢?

Introduction of uncommon interfaces of openlayers

OP-5,输入/输出信号范围-一信号处理能力
随机推荐
A Review of Nature Microbiology: Focusing on the Algae--Ecological Interface of Phytoplankton-Bacteria Interactions
"A daily practice, happy water problem" 1374. Generate a string with an odd number of each character
ECCV 2022 | 通往数据高效的Transformer目标检测器
C# Barrier类
[安洵杯 2019]easy_web
【软件工程导论】软件工程导论笔记
笑话:如果你在河边等待得足够久,你会看到你的敌人的尸体漂过,是怎么翻译出来的?
谷歌竞价机器学习如何去理解?
ALV概念讲解
golang源码分析:time/rate
Redis cluster configuration
C# Monitor类
Likou Question of the Day - Day 46 - 344. Reverse Strings
如何解决图像分类中的类别不均衡问题?不妨试试分开学习表征和分类器
数字孪生助力智慧城市可视化建设
ALV concept explanation
TPAMI2022 | TransCL: based on the study the compression of the Transformer, more flexible and more powerful
J9数字论:互联网跨链桥有什么作用呢?
9,共模抑制比一-不受输入信号中共模波动的影响。【如何分析共模CM抑制比。】
李沐动手学深度学习V2-BERT预训练和代码实现