#include <stdio.h> #include <stdlib.h> //插入排序的函数 void insert_sort(int *a,int *b,int arr_size){ int i=0,j=0,m=0,flag; //先把数组a的第一个元素给数组b b[0]=a[0]; //从数组a的a[1]开始,遍历完数组a的所有元素 for(i=1;i<arr_size;i++){ //初始化信号灯 flag = 0; //对于数组a的当前元素a[i],从b[0]开始,依次比较数组b的元素,只到全部元素被比较完或者找到第一个比他小的元素 for(j=0;(j<i)&&(flag==0);j++){ if(a[i]>b[j]){ //将b[j]到b[i]的元素全部全部后移一位 for(m=i;m>j;m--){ b[m] = b[m-1]; } //将a[i]赋值给b[j],原来的b[j]已经被移到了b[j+1]的位置上了 b[j] = a[i]; //点亮信号灯 flag = 1; } } //如果上面的比较结束了还是没有找到比a[i]小的,那么a[i]就排最后吧,这样其他元素也不用动位置 if(flag == 0){ b[i] = a[i]; } } } int main(){ //由于数组的长度未定,所以定义为动态数组,也就是指针 int *a,*b,n,m,k; printf("%s","请输入数组个数:"); scanf("%d",&n); //为数组分配内存空间 a = malloc(sizeof(int)*n); b = malloc(sizeof(int)*n); printf("%s","请依次输入数组元素:"); //为数组a赋值 for(m=0;m<n;m++){ scanf("%d",&a[m]); } //进行插入排序 insert_sort(a,b,n); //依次输出数组b的各个元素 for(k=0;k<n;k++){ printf("%d/n",b[k]); } //释放空间 free(a); free(b); }