一、思路
核心思想:当前序列已有序,再插入一个新的元素,并把它调整到合适位置,直到新的序列有序。
对于A[0]-A[i]这个无序序列:(以升序排序)
- A[0]只有一个元素,必然有序
- 插入A[1],如果A[1]比A[0]大,无需调整;反之,A[0]往后挪一个位置,A[1]放在原A[0]的位置
- 以此类推,插入A[i], A[0]-A[i-1]均有序,将A[i-1]、A[i-2]…依次与A[i]比较,若比A[i]大,则依次后挪一个位置,知道A[i]插入正确的位置
二、代码
#include<stdio.h>
#define LEN 5
int a[LEN] = {10,5,2,4,7};
void insert_sort()
{
for(int i=1; i<LEN; i++)
{
int key = a[i]; //key为待插入的元素
int j = i-1;
while(a[j] > key&&j >= 0) //key与a[i-1]及其之前的元素比较,直到找到合适的插入位置
{
a[j+1] = a[j];
j--;
}
a[j+1] = key;
}
}