您的位置:首页 > 其它

排序算法总结:二、插入排序

2015-07-15 17:26 232 查看
先说一下比较排序的定义吧:

比较排序的定义

就是除了赋值操作外, 只存在小于‘<’和大于‘>’这两种运算符是仅有的允许对
输入数据进行的操作。

插入排序的性质

插入排序是一种比较排序

将一个数组分为两部分,前面为排好序的部分,后面为未排序的部分

将未排序部分的元素逐个插入到已排好序部分的正确位置上

就像扑克牌按顺序排列,原先 2,4,5 和 10 都排好序了,现在需要为 7 找到正确的位置

时间复杂度

运行时间为 T(N) = O(N^2)

平均运行时间为 T(N) = Θ(N^2)。

代码实现

#include

typedef int ElementType;
void InsertionSort(ElementType A[], int N);

void main(void)
{
int i;
int unordered[] = {4, 5, 2, 1, 0};
InsertionSort(unordered, 5);
for(i = 0; i < 5; i++)
{
printf("%d\n", unordered[i]);
}
}

//双重循环,时间复杂度为T(N)=O(N^2)
void InsertionSort(ElementType A[], int N)
{
int j, p;

ElementType Tmp;
for(p = 1; p < N; p++)
{
Tmp = A[p];
for(j = p; j > 0 && A[j - 1] > Tmp; j--)
{
A[j] = A[j - 1];
}
A[j] = Tmp;
}
}


排序过程演示

排序数组 5, 2, 4, 6, 1, 3 的过程:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: