admin管理员组

文章数量:1531374

2024年6月26日发(作者:)

基于比较的排序算法有哪些

七种排序算法[1]分别是:

四种基本排序算法:冒泡排序,选择排序,插入排序,

希尔排序。

三种高级排序算法:归并排序,快速排序,堆排序。

这七种排序算法都是比较排序算法,这种算法的特点顾名思义

就是排序是依赖于元素间两两比较的结果[2]。

任何比较算法在最坏的情况下都要经过Ω(nlgn)次比

较。

1. 冒泡排序

顾名思义,冒泡排序的整个过程就像碳酸饮料 中的小气泡,

慢慢浮到最上面。只不过在冒泡排序中浮上去的是最大的数而

已。

简要思路: 遍历数组,每次比较相邻的两个元素 arr[i],

arr[i + 1],如果 arr[i + 1] < arr[i] ,就把 arr[i + 1]

和 arr[i] 调换位置。

冒泡排序有这样的排序特性:

每次都只排好一个元素。

最坏情况时间复杂度为O(n^2)。

平均情况时间复杂度为O(n^2)。

需要额外空间O(1)。

所需时间与输入数组的初始状态无关。

算法示例

public static void bubbleSort(int[] arr) {

int n = ;

// 每一次循环,都把最大的元素冒泡到对应的位置

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

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

// 如果后一个比前一个小,那么就把大的放后

if (less(arr, j + 1, j)) exch(arr, j, j +

1);

}

}

}

2. 选择排序

其实选择排序,直观上来说和冒泡排序差不多,只不过么有了

相邻元素频繁交换的操作,但是却保留了冒泡排序频繁访问数

组的特点。

简要思路:对于每一个循环,我们在剩余的未排序数中找到最

小数对应的下标,遍历一次后再把对应的数放到合适的位置。

选择排序有这样的排序特性:

每次循环都只排好一个元素。

最坏情况时间复杂度为Theta (n^2)。

平均情况时间复杂度为Theta (n^2)。

需要额外空间为O(1)。

所需时间和输入数组的初始状态无关。

算法示例

public static void selectionSort(int[] arr) {

本文标签: 排序算法元素对应时间