插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
算法步骤
-
将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。
-
从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)
算法演示
5 3 4 7 2
-
一开始左端数字已经排序,数字 5 不动
-
然后,取出剩余未操作的左端数字 3
-
将其与已经操作的左侧数字相比较
-
如果左边的数字较大,则交换两个数字
-
这种情况下,由于 5 大于 3 ,所以交换两个数字
-
重复此操作,直到出现一个较小的数字或者数字到达左端
-
数字 3 已经完成排序
-
接下来,和之前一样取出剩余未操作的左端数字 4
-
与其相邻的左边数字进行比较
-
这种情况下,由于 5 大于 4 ,所以交换两个数字
-
继续操作,由于 3 小于 4 ,即出现了更小的数字,所以 4 停止移动
-
数字 4 已经完成排序
-
重复相同的操作,直到所有的数字完成排序
template<class T>
void insertionSort(T arr[], int n)
{
for (int i = 1; i < n; i++)
{
for (int j = i; j > 0; j--)
{
if (arr[j]<arr[j-1])
{
swap(arr[j], arr[j - 1]);
}
else
{
break;
}
}
}
return;
}
插入排序算法详解
1262

被折叠的 条评论
为什么被折叠?



