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