一:基础概念
1.概念区分
内排序:指待排序列完全存放在内存中所进行的排序过程,适合不太大的元素序列。
外排序:处理的数据不能一次装入内存,只能放在读写较慢的外存储器上(移动硬盘之类的存储器)
2.内排序的鉴定
从时间复杂度,空间复杂度,稳定度三个方面来综合考量某种排序算法的优劣。
二:插入排序
1.思想
逐步扩大成果的思想。将序列中第一个元素作为一个有序序列,然后将剩下的n-1个元素按关键字的大小依次插入该有序序列,每插入一个元素后都依然保证有序。
时间复杂度为O(n*n)。空间复杂度为O(1),属于原地排序,不申请多余空间。
2.java实现:列举三种实现算法
二.冒泡排序
1.思想:把小的元素往前调或者把大的元素往后调。比较相邻的两个元素,若发生交换,也是两个元素交换。
总的平均时间复杂度为O(n*n),空间复杂度为O(1),是一种稳定排序。
2.算法实现:
三.选择排序
1.思想:每一次从待排序列中选出最大或者最小的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
平均时间复杂度:O(n*n),空间复杂度O(1),不稳定排序。
2.算法实现
:
四.shell排序
1.思想:一种插入排序算法,是针对直接插入排序算法的改进,核心的思想是缩小增量。希尔排序实质上是一种分组插入算法。
时间复杂度和区间长度的选取有关系,在O(n^(3/2))~O(N^(7/6))之间。空间复杂度为O(1),是一种不稳定排序。
2.算法: