直接插入排序既将第一个认定为已经排序好的序列,然后将后面的无需序列一次插入前面的有序的子序列里面。
例如:25 56 12 35 58
第一趟:25 56 12 35 58
第二趟:12 25 56 35 58
第三趟:12 25 35 56 58
第四趟:12 25 35 56 58
第五趟:12 25 35 56 58
#include<stdio.h>
void insertion_sort(int arr[],int len)
{
int i,j,temp;
for(i=1;i<len;i++)
{
temp=arr[i];
if(arr[i]<arr[i-1])//如果比前一位小
{
for(j=i-1;j>0&&temp<arr[j];j--)//在已排序的序列中找到杜宇前一位小于后一位的位置
{
arr[j+1]=arr[j];//将后面的依次向后挪
}
arr[j+1]=temp;//填入该位置
}
}
}
int main()
{
int arr[]={12,23,56,54,65,25,42,51,36};
int len=(int)sizeof(arr)/sizeof(arr[0]);
insertion_sort(arr,len);
for(int b=0;b<len;b++)
{
printf("%5d",arr[b]);
}
return 0;
}