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

全文共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 =tru

Copyright © 2022 历届世界杯_世界杯篮球 - cnfznx.com All Rights Reserved.