学习记录:插入排序
1. 直接插入排序
顾名思义,实现排序的方式就是插入。下面由从小到大的顺序进行一次排序。
确定一个已经有序的序列,这里先选第一个元素为有序(毕竟只有一个元素)。
- 从无序的第一个元素开始比较,有两种情况:
- 无序序列的第一个元素大于有序数列的最后一个元素,就说明这个元素在有序序列中是最大的,所以它的位置是正确的,无需任何操作。
- 无序序列的第一个元素小于有序数列的最后一个元素,该元素位置错误,从有序序列开始遍历,直到找到正确的位置。
将已经遍历过的元素向后移一位,将该元素插入。
重复这种操作,直到全部有序
//代码如下
void InsertSort(int *arr,int length)
{
int Temp;//用于记录无序序列的第一个元素
for (int i=1;i<length;i++)
{
if (arr[i-1]<=arr[i])//第一种情况
continue;
else//第二种情况
{
Temp=arr[i];//记录
for (int j=0;j<i;j++)
{
if (Temp<arr[j])//找到正确的位置
{
for (int k=i;k>=j;k--)//该循环用于将数组后移
arr[k]=arr[k-1];
arr[j]=Temp;//将该元素插入
break;//退出循环
}
}
}
}
}