C语言之插入排序算法

1、什么是直接插入算法?算法

直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的纪录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到全部的纪录插入完为止,获得一个新的有序序列。数组

选择排序对大小为N的无序数组R[N]进行排序,进行N-1轮选择过程。首先将第1个元素做为已经排序好
的子数组,而后将剩余的N-1个元素,逐个插入到已经排序好子数组;。所以,在第 i轮排序时,前i个
元素老是有序的,将第i+1个元素插入到正确的位置。
ide

2、算法实现过程:spa

第1轮
[ 3 ]  [ 2  4  1 ]  (最初状态,将第1个元素分为排序好的子数组,其他为待插入元素)
[ 3 ]  [ 2  4  1 ]  (因为3>2,因此待插入位置j=1)
[ 2  3 ]  [ 4  1 ]  (将2插入到位置j)

第2轮
[ 2  3 ]  [ 4  1 ] (第1轮排序结果)
[ 2  3 ]  [ 4  1 ] (因为2<4,因此先假定j=2)
[ 2  3 ]  [ 4  1 ] (因为3<4,因此j=3)
[ 2  3  4 ]  [ 1 ] (因为4恰好在位置3,无需插入)

第3轮
[ 2  3  4 ]  [ 1 ] (第2轮排序结果)
[ 2  3  4 ]  [ 1 ] (因为1<2,因此j=1)
[1  2  3  4 ]    (将1插入位置j,待排序元素为空,排序结束)
排序

3、C语言程序代码
#include<stdio.h>
int main(void)
{
int i;
int a[10]={2,4,6,8,0,1,3,5,7,9};
printf("原数组为:"); 
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
printf("\n") ;
crpx(a,10);
printf("排序后的数组为:"); 
for(i=0;i<10;i++)
{
printf("%d ",a[i]);
}
return 0;
 } 
int crpx(int *a,int n)
{
int in,out,tmp;
for(out=1;out<n;out++)
{
tmp=a[out];
in=out;
while(in>0&&a[in-1]>tmp)
{
a[in]=a[in-1];//大的数向后移一位 
in--;
}
a[in]=tmp;  
}
}
it

相关文章
相关标签/搜索