一、选择排序(selection sort)
>>核心思想:repeatedly select largest or smallest remaining element and swap it into sorted position.(重复选出剩余元素中的最大值(降序)或最小值(升序))
-
时间复杂度: 。
-
第一步, 共计进行 次比较和交换( 次比较+ 次交换)。
-
第二步,共计进行 次比较和交换( 次比较+ 次交换),因为此时经过第一步的操作已经排序了 个元素。
-
第三,共计进行 次
-
…
因此:所有操作步骤为:
二、冒泡排序(bubble sort)
>>核心思想: repeatedly compare and swap ( if necesarily) two elements. (循环遍历输入列表进行两两比较,依次获得最大/小值)
-
时间复杂度: 。
-
第一步,共计进行 次比较和 次交换(最坏情况下)。
-
第二步,共计进行 次比较和 次交换(最坏情况下)。
-
…
因此,所有操作步骤为:
三、归并排序(merge sort)
>>核心思想:分治法,sort blocks of 1’s into 2’s, 2’s into 4’s, etc, on each pass merging sorted blocks into sorted larger blocks.(将输入列表分为长度1为的n个子序列,循环进行两两合并排序)
>>Note: This is the theoretical best-possible Big-O for comparison-based sorting! (理论上,归并排序是时间复杂度最优的基于比较策略的排序算法)
-
时间复杂度: 。
-
第一步,将 个元素看作 个子序列,将 个子序列两两合并并排序,长度为 的 个子序列均得到了排序。
-
第二步,将 个子序列两两合并并排序,长度为 的 个子序列得到了排序。
-
…
-
第 步,将2个子序列合并排序,即长度为 的序列得到了排序。
显然, ,每一步需进行复杂度为 的比较和拷贝等操作, 。这里, 。
注:https://blog.csdn.net/xiaozhimonica/article/details/89470129 。