为什么要排序?排序算法的性能提升之道

为什么要排序?排序算法的性能提升之道

全文共4076字,预计学习时长11分钟

图源:unsplash

排序有什么用?想象一下,如果字典不是按照字母顺序排列,查找一个单词,你得查到什么时候?这就是为什么人们引入了分类的概念,因为其极大地帮助我们快速搜索物品。

那么,如何实现排序呢?这些排序算法,你应该了解。

冒泡排序

这是最简单的排序算法。只需比较每对相邻的元素,并检查元素是否有序,否则交换两个元素,直到所有元素都被排序为止。

for(int i =0;i < n; i++){

for(int j=0;j < n -1; j++){

if(arr[j] > arr[j+1]){

int temp = arr[j];

arr[j] = arr[j+1];

arr[j+1] = temp;

}

}

}

图源:谷歌

性能分析:

· 时间复杂度:

1.最坏情况:O(n²)——由于循环n次元素n次,n为数组的长度,因此冒泡排序排序的时间复杂度变为O(n²)。

2.最佳情况:O(n²)——即使数组已经排序了,算法也会检查每个相邻对,因此最佳情况下的时间复杂度将与最坏情况相同。

· 空间复杂度:O(1)。

由于只输入了数组并未使用任何额外的数据结构,因此空间复杂度将为O(1)。

改进版冒泡排序:

如果看一下代码,就会发现在上述排序算法中即使数组已经排序,时间复杂度也将相同,即O(n²)。

为了克服这个问题,提出了一种改进算法。创建一个标志来确定数组是否已排序,该标志会检查所有相邻对之间是否发生了交换。如果遍历整个数组时没有交换,则该数组已完全排序,因此可以跳出循环。这大大降低了算法的时间复杂度。

for(int i =0;i < n; i++){

boolean isSwapped =false;

for(int j=0;j < n -1; j++){

if(arr[j] > arr[j+1]){

int temp = arr[j];

arr[j] = arr[j+1];

arr[j+1] = temp;

isSwapped =true;

}

相关推荐

怎么测试自己的车有没有积碳!看完你就知道了!
365bet线路检测

怎么测试自己的车有没有积碳!看完你就知道了!

📅 07-29 👁️ 6682
移动光钎一年多少钱
365bet体育在线主页

移动光钎一年多少钱

📅 06-30 👁️ 2811
UI控件有哪些?三大类型,带你一网打尽!
365bet线路检测

UI控件有哪些?三大类型,带你一网打尽!

📅 07-23 👁️ 4529
计算机病毒
365bet滚球网

计算机病毒

📅 07-18 👁️ 5501
双系统高性能 昂达V10 Pro高配版评测
365bet滚球网

双系统高性能 昂达V10 Pro高配版评测

📅 09-14 👁️ 7142
为什么需要科学上网?全面解析与应用
365bet线路检测

为什么需要科学上网?全面解析与应用

📅 10-10 👁️ 354
割袍斷義:釋義,史籍記載,原文,成語故事,評價,
365bet线路检测

割袍斷義:釋義,史籍記載,原文,成語故事,評價,

📅 08-30 👁️ 7553