冒泡排序
原理:
设置需求:按从小到大排序
1.比较相邻的两个元素大小,第一个元素比第二个元素大就交换位置,如果小就不动
2.依次比较所有相邻的数组,按照这种原理比较(n-1)次,会把最大值最终排到最后面
时间复杂度分析:
按最坏的情况
元素比较的次数:(n-1)+(n-2)+(n-3)+…+3+2+1=n^2/2-n/2
元素交换的次数再最坏情况下和比较次数是一样的次数:
(n-1)+(n-2)+(n-3)+…+3+2+1=n^2/2-n/2
所以总执行次数是:元素比较次数加上元素交换次数计算得:n^2-n
按照大O记法,冒泡排序的时间复杂度为O(n^2)
选择排序
原理
设置需求:从小到大排序
1.假定第一个元素(索引为0)是最小的元素,然后跟后面所有的元素进行比较,如果能找到比第一个元素还要小的元素,就用索引值进行标记为最小元素,当比较完所有的数值,选出了最小的元素,把最小元素和第一个元素的索引位置进行交换,就能把最小元素的排到最前面了
2.然后按照这个原理依次把后面的元素进行排序,这样就用选择排序完成了排序
时间复杂度分析:
按最坏的情况
元素比较的次数:(n-1)+(n-2)+(n-3)+…+3+2+1=n^2/2-n/2
元素交换的次数再最坏的情况下需要进行n-1次交换
所以总执行次数是:元素比较次数加上元素交换次数计算得:n^2/2+n/2-1
按照大O记法,冒泡排序的时间复杂度为O(n^2)
插入排序:
原理
设置需求:从小到大排序
1.把元素分为两组:已经排序的元素和未排序的元素
2.默认第一个元素是已经排序的,然后未排序的向已排序的组进行插入
3.未排序的第一个元素为待插入的元素,已排序的元素倒叙遍历依次和待插入元素进行比较,如果待插入元素比前面的小就交换位置,大就不动 (类似打扑克牌排序成顺子)
时间复杂度分析:
按最坏的情况:
元素比较的次数:(n-1)+(n-2)+(n-3)+…+3+2+1=n^2/2-n/2
元素交换的次数再最坏情况下和比较次数是一样的次数:
(n-1)+(n-2)+(n-3)+…+3+2+1=n^2/2-n/2
所以总执行次数是:元素比较次数加上元素交换次数计算得:n^2-n
按照大O记法,冒泡排序的时间复杂度为O(n^2)
总结
这三个排序规则的在最坏情况下时间复杂度都是O(n^2),而平方阶随着规模的增大,时间成本则急剧增加,所以这些基本排序方法都不能处理更大规模的问题