
具体实现代码为:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void InsertSort(int a[], int n)
{
int i,j,k;
for (i = 1; i < n; i++)
{
for (j = i - 1; j >= 0; j--)
{
if (a[j] < a[i])
{
break;
}
}
if (j != i - 1)
{
int tmp = a[i];
for (k = i - 1; k > j; k--)
{
a[k + 1] = a[k];
}
a[k + 1] = tmp;
}
}
}
void PrintArray(int arr[], int n)
{
int i;
for (i = 0; i < n; i++)
{
printf("%d ",arr[i]);
}
putchar('\n');
}
int main(void)
{
int arr[] = {10,2,3,8,9,4,7};
int num = sizeof(arr)/sizeof(arr[0]);
PrintArray(arr,num);
InsertSort(arr,num);
PrintArray(arr,num);
return 0;
}
将搜索和数据移动合并得:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void swap(int *a, int *b)
{
int tmp = *a + *b;
*a = tmp - *a;
*b = tmp - *a;
}
void InsertSort(int a[], int n)
{
int i,j,k;
for (i = 1; i < n; i++)
{
if ( a[i] < a[i - 1])
{
k = a[i];
for (j = i - 1; j >= 0 && a[j] > k; j--)
{
swap(&a[j],&a[j+1]);//这与冒泡的思想比较相似。
}
a[j + 1] = k;
}
}
}
void PrintArray(int arr[], int n)
{
int i;
for (i = 0; i < n; i++)
{
printf("%d ",arr[i]);
}
putchar('\n');
}
int main(void)
{
int arr[] = {10,2,3,8,9,4,7};
int num = sizeof(arr)/sizeof(arr[0]);
PrintArray(arr,num);
InsertSort(arr,num);
PrintArray(arr,num);
return 0;
}


被折叠的 条评论
为什么被折叠?



