假设这些排序算法想得到一个升序序列,长度为n。
参考
https://blog.csdn.net/qq_53414724/article/details/125016223
https://zhuanlan.zhihu.com/p/602971700
冒泡排序
冒泡排序从头开始寻找相邻的元素,找到较大的元素放于后面,一直到数组末尾。循环n-1轮,每一轮都从0开始,但结束位置越来越靠近起始位置,第一轮明确最大的元素,第二轮明确第二大的元素,...。代码中i、j指针总是挨着的,满足j=i+1。冒泡排序算法稳定,平均、最差时间复杂度都是O(n^2),最优时间复杂度为O(n),空间复杂度为O(1)。
简单选择排序
简单选择排序循环n轮,每一轮明确一个当前最小的元素、放置于数组最前侧。代码中i、j指针不是挨着的,i指针指向数组最前侧已找到的最小的若干值后一位,j指针从i开始向后遍历至数组末尾,如果碰到arr[j]<arr[i],则进行数值交换,因此每一轮中可能i、j指针指向的值交换多次。简单选择排序算法不稳定,平均、最好、最差时间复杂度都是O(n^2),空间复杂度为O(1)。