1.1插入排序-简单(直接)插入排序
/* Straight Insertion Sort*/
一.评估
稳定的排序算法
时间复杂度O(n^2)
移动次数 最小值n-1,最大值(n+2)(n-1)/2,平均值(n^2)/4。
二.思想
逐一插入,由尾向前逐一比较。
r[0]作用:哨兵(监视哨)、暂存器。
void InsertSort(int *r)
{
int i,j;
for(i = 2;i <= N;i ++)
{
r[0] = r[i];//r[0]为哨兵、暂存器
for(j = i-1; r[0] < r[j]; j --)
{
r[j+1] = r[j];
}
r[j+1] = r[0];
}
}
三.示例
/* Straight Insertion Sort*/
//Copyright @wangwei14309 All rights reservd
# include <stdio.h>
void creat(int *r);
void InsertSort(int *r);
void print(int *r);
int N;
int main()
{
int a[50];
creat(a);
InsertSort(a);
print(a);
return 0;
}
void creat(int *r)
{
int i;
printf("sort how many numbers :");
scanf("%d",&N);
printf("input %d numbers :",N);
for(i = 1;i <= N;i ++)
{
scanf("%d",&r[i]);
}
}
void InsertSort(int *r)
{
int i,j;
for(i = 2;i <= N;i ++)
{
r[0] = r[i];//r[0]为哨兵、暂存器
for(j = i-1; r[0] < r[j]; j --)
{
r[j+1] = r[j];
}
r[j+1] = r[0];
}
}
void print(int *r)
{
int i;
printf("the result is :");
for(i = 1; i <= N; i ++)
{
printf("%d ",r[i]);
}
printf("\n");
}