所谓插入排序就是将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中,直到全部记录插入完成。
1.直接插入排序
假设在排序过程中,待排序表L[1…n]在某次排序过程中的某一时刻状态如下:
为了实现将元素L[i]插入到已有序列的子序列L[1…i-1]中,需要执行以下操作:
(1)查找L(i)在L[1…i-1]中的插入位置。注意是从1到n !!!
(2) 将L[k…i-1]中所有元素全部后移一个位置。
(3)将L(i)复制到L(k)。
为了实现对L[1…n]的排序,可以将L(2)~L(n)依次插入到前面已排好序的子序列中,初始假定L[1]是一个已排好序的子序列。执行n-1次插入排序,就能得到一个有序的表。代码如下:
#include<cstdio>
#include<iostream>
using namespace std;
void InsertSort(int a[], int n);
int main(){
int n;
int maxn=110;
printf("请输入元素的个数:\n");
scanf("%d",&n);
int a[maxn];
printf("请输入数组中的元素:\n");
for(int i=1; i<=n; i++){
scanf("%d", &a[i]);
}
a[0] = 1110;
InsertSort(a, n);
printf("请输出排序好的数组:\n");
for(int i=1; i<=n; i++){
printf("%d ",a[i]);
}
return 0;
}
void InsertSort(int a[