//直接插入排序:将第一个数据看成有序表,将后面的数据一次插入表中
# include<stdio.h>//时间复杂度 O(n^2) 稳定
void InsertSort(int a[], int n){
int i, j;
for(i = 1; i <= n; i++){
if(a[i] < a[i-1]){ //若插入的第i个数大于它的前一个数i-1,就直接插入在最后,如果小于,就移动有序表插入
a[0] = a[i]; //设置为哨兵,作用是用于暂时存放要插入的数
for(j = i-1; a[j]>a[0] && j>=0; j--)//从要插入数i的前一个数i-1开始,若比i大,就后移一位
a[j+1] = a[j];
a[j+1] = a[0]; //找到真确位置,将要插入数放在第j个数后面
}
}
}
int main(){
int n;
printf("请输入你要排序的数的个数:");
scanf("%d", &n);
int *a = new int[n+1];//申请一个整型变量空间,没有赋初值,并定义一个整型指针a指向该地址空间
for(int i = 1; i <= n; i++)
scanf("%d", &a[i]);
InsertSort(a, n);
printf("排序后:");
for(int j = 1; j <= n; j++)
printf("%6d", a[j]);
delete []a;//回收数组a的空间
return 0;
}