直接插入排序*
思想:直接插入排序就是把一个将要排的插入一段有序序列。
废话不多说直接上代码
void InsertSort(int* a, int n)
{
for (int i = 0; i < n-1; i++)
{
int end = i;
int tmp = a[end + 1];
while (end >= 0)
{
if (a[end] > tmp)
{
a[end + 1] = a[end];
--end;
}
else
{
break;
}
a[end+1]=tmp;
}
}
}
先从一次排序来理解设置一个变量作为储存将要插的这个变量为tmp,end作为前面要排的一段序列的最后一个,现在就将这两个值进行比较,如果tmp 小于end,就将两个进行对调,将end给end+1,如果是大于就直接跳出,也可能会遇到这样一种情况,就是要排的这个值很小要一直排,排到最前面就是第三种情况将tmp存的那个变量给最前面即就是end为0。
下面进行测试
这个是打印函数:
void PrintArray(int* a, int n)
{
for (int i = 0; i < n; i++)
{
printf("%d ", a[i]);
}
}
测试
int main()
{
int a[] = { 58,32,17,45,29 };
InsertSort(a, sizeof(a) / sizeof(int));
PrintArray(a, sizeof(a) / sizeof(int));
}
建议写的时候是多文件方式吧。