您的位置:首页 > 其它

几个基础算法介绍和实现——插入排序

2017-07-02 22:46 363 查看

最简单的排序算法之一是插入排序

插入排序由N-1趟(pass)排序组成,对于P=1趟到p=N-1趟,插入排序保证从位置0到位置P上的元素为已排序状态。

插入排序利用这样的事实:位置0到位置P-1上的元素都是已排序过的。

简单来说就是长度为N的序列,前P个元素有序,第P+1个到第N—1个元素为无序,则将第P+1个元素与前P个元素逐个比较,逆序交换,看上去就像往前P个有序序列的合适位置插入一个元素,直到所有无序元素都插入到有序中。

算法描述:

1. 从第一个元素开始,只有一个元素时认为是有序的

2. 取出下一个元素,在已经排序的元素序列中从后向前扫描

3. 如果该元素(已排序)大于新元素,将该元素移到下一位置

4. 重复步骤 3,直到找到已排序的元素小于或者等于新元素的位置

5. 将新元素插入到该位置后

6. 重复步骤 2~5

代码如下:

void Sort::insertSort(int (&a)[10], int n){

int i, position;
int temp;

for (position = 1; position < n; position++)
{
temp = a[position];
for (i = position; i > 0 && a[i - 1] > temp; i--)
{
a[i] = a[i - 1];
}
a[i] = temp;
}
}

int main(void)
{

Sort m_sort;
int a[10] = { 34, 8, 64, 51, 32, 21, 99, 108, 54, 33 };

m_sort.insertSort(a,10);

for (int i = 0; i < 10; i++)
{
cout << a[i] <<endl;
}

system("pause");
return EXIT_SUCCESS;
}


运行结果:



总结:

1. 插入排序的平均时间复杂度是O(n2)

2. 插入排序为稳定排序
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  插入排序 算法