最近各种笔试面试,排序算法考了一次又一次,发现非常有必要熟悉各种排序算法,能在很短时间将其正确书写于纸上,并且能够提交编译。
学习材料:数据结构与算法分析——C语言描述
1、插入排序
插入排序是最简单的排序算法之一,插入排序由N-1趟排序组成,稳定排序,算法复杂度为O(n2),最好情况为O(n),最坏和平均情况均为O(n2)。其基本思想为:
在待排序的数组A[0:N-1]中,前i(0 <= i < N)个元素已经经过排序,然后取第i+1个元素,和前i个元素进行对比,然后将A[i+1]放在合适的位置。这就是所谓的插入排序。
代码如下:
//从小到大插入排序
void InsertionSort(ElementType A[], int N)
{
int j, p;
ElementType Tmp;
//循环从p=1开始,因为假设第一个元素为已经排序好的元素
for(p = 1; p < N; p++)
{
Tmp = A[p]; //记录将与前p-1个比较的元素A[p]
//循环从p开始,将A[p]依次与前面的元素比较
//一旦发现前面的元素小于A[p],或j=0(此时A[p]大于所有前面的元素)
//停止循环
for(j = p; j > 0 && A[j - 1] > Tmp; j--)
{
A[j] = A[j - 1];//依次将元素后移,为插入元素留出空间
}
A[j] = Tmp;//将A[p]插入其正确的位置
}
}