一、直接插入排序(稳定)
直接插入排序是最简单的排序方法之一,其基本思想是每次从无序表中取出一个元素,把它插入到有序表的合适位置,使有序表依然有序。直接插入排序是由两层嵌套循环组成的,外层循环标识并决定待比较的数值,内层循环为待比较数值确定其最终位置,其算法时间复杂度为O(N*N),空间复杂度为O(1)。
void insertSort(int a[], int len) //本文默认排序为从小到大排序
{
int i,j,temp;
for (i = 1; i < len; i++) //外层循环标识待排序的数值
{
temp = a[i]; //保存第i个需要插入的数值
for(j = i - 1; j >= 0 && a[j] > temp; j--) //内层循环决定插入的位置(这个位置一定在0到i-1之间)
a[j+1] = a[j]; //元素后移以提供插入空间
a[j+1] = temp; //查找到位置之后插入数据
}
}
二、冒泡排序(稳定)
冒泡排序同样是最简单的排序方法之一,并且常被用来寻找数组中最值。冒泡排序算法运作如下:1、比较相邻的元素,如果第一个比第二个大,就交换他们两个;2、对每一对相邻元素做同样的工作,从开始第一对到结尾最后一对。一次遍历之后,最后的元素应该会是最大的数;3、针对所有元素重复以上的步骤,除了最后一个;4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。该算法的时间复杂度为O(N*N),空间复杂度为O