学习记录:插入排序

学习记录:插入排序

1. 直接插入排序

顾名思义,实现排序的方式就是插入。下面由从小到大的顺序进行一次排序。

  1. 确定一个已经有序的序列,这里先选第一个元素为有序(毕竟只有一个元素)。

  2. 从无序的第一个元素开始比较,有两种情况:
    1. 无序序列的第一个元素大于有序数列的最后一个元素,就说明这个元素在有序序列中是最大的,所以它的位置是正确的,无需任何操作。
    2. 无序序列的第一个元素小于有序数列的最后一个元素,该元素位置错误,从有序序列开始遍历,直到找到正确的位置。
      将已经遍历过的元素向后移一位,将该元素插入。

重复这种操作,直到全部有序

//代码如下
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;//退出循环
                }
            }
        }
    }
}

猜你喜欢

转载自www.cnblogs.com/Salty-Fish/p/12469385.html