I. 直接插入排序基本思想
直接插入排序的基本思想是将需要排序的一组数字,将其划分成有序区域和无序区域,然后依次取无序区域中的数字,将其和有序区域的数字进行对比,然后将其插入到有序区域中的对应位置。如此循环,直到无序区的数的数量变为零。
例如 有一组数字 56 32 5980 1 需要将其从小到大排序
第一趟 56 32 59 80 1
第二趟 32 56 59 80 1
第三趟 32 56 59 80 1
第四趟 32 56 59 80 1
第五趟 1 32 56 59 80
(有序区为红色,无序区为绿色)
II. 直接插入排序的代码表示
数据结点类型
typedef struct
{
int data; //权值
int key ; //关键值
} RecType;
直接插入排序
void DirectInsertSort ( RecType R[] , int n)
{
int i,j;
for( i = 2 ; i <= n ; i++ ) //从1号位开始储存,有n-1轮
{
if( R[i].key < R[i-1].key ) //判断无序区首元素与有序区末元素大小
{
R[0] = R[i] ; //0号位临时储存结点
for( j = i-1 ; R[0].key<R[j].key ; j-- ) //有序区元素后移
R[j+1] = R[j] ;
R[j+1]=R[0];
}
}
}