C 排序算法:插入排序
一、实现
#include<stdio.h>
void insertSort(int *p, int size);
void disArr(int *p,int size);
int main()
{
int arr[] = {1,9,8,7,0,2};
insertSort(arr, sizeof(arr) / sizeof(*arr));
disArr(arr, sizeof(arr) / sizeof(*arr));
return 0;
}
void insertSort(int *p, int size)
{
int tmp,j;
for (int i = 1; i < size; ++i)
{
tmp = p[i];
for (j = i;j-1>=0&&tmp<p[j-1]; --j)
{
p[j] =p[j - 1];
}
p[j] = tmp;
}
}
void disArr(int *p,int size)
{
for (int i = 0; i < size; ++i)
{
printf("%-3d", p[i]);
}
puts("");
}
二、过程演示
三、优化:希尔排序
希尔排序:插入排序的一种,减少了躺数和每趟比较的次数。
void shellSort(int *p, int size)
{
int gap=size/2,tmp,j;
while (gap >= 1)
{
for (int i = gap; i < size; ++i)
{
tmp = p[i];
for (j = i; j - gap >= 0 && tmp < p[j - gap]; j-=gap)
{
p[j] = p[j - gap];
}
p[j] = tmp;
}
gap = gap / 2;
}
}