插入排序:将待排序数列的右边无序元素,逐个插入左边有序数列中。
1、直接插入排序(步长为1的Shell排序)
2、Shell排序(步长从N/2直到1)
#include <stdio.h>
#define NUM 4
/* 直接插入排序 */
void insertSort(int *A)
{
for (int i = 0; i < NUM; i++)
{
int k = i - 1; //从i后面做起
int nowInt = A[i]; //将当前需要插入的元素保存下。
while ( (A[k] > nowInt) && (k >= 0) )
{
A[k+1] = A[k]; //将后面一个往前诺
k--;
}
A[k+1] = nowInt;
}
}
/* 希尔排序 */
void shellSort(int *A)
{
int stepLen = NUM / 2;
while (stepLen>=1)
{
for (int i = 0; i < NUM; i += stepLen)
{
int k = i - 1; //从i后面做起
int nowInt = A[i]; //将当前需要插入的元素保存下。
while ( (A[k] > nowInt) && (k >= 0) )
{
A[k+1] = A[k]; //将后面一个往前诺
k--;
}
A[k+1] = nowInt;
}
stepLen /= 2;
}
}
int main(void)
{
int a[NUM], i = 0;
printf("Enter %d integers:(ctrl+z to end)\n", NUM);
while (scanf("%d", &a[i++]) && i < NUM);
//insertSort(a);
shellSort(a);
for (int i = 0; i < NUM; i++)
printf("%d ", a[i]);
return 0;
}