C语言 数据结构 实验六
8638 - 直接插入排序
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
void TraverseArray(int *ary, int n)
{
int i;
for(i = 0; i < n; i++)
printf("%d ", ary[i]);
printf("\n");
}
void simpleInsertSort(int *ary, int n)
{
int i, j, temp;
for(i = 1; i < n; i++)
{
if(ary[i] < ary[i-1])
{
temp = ary[i];
for(j = i-1; j >= 0 && ary[j] > temp; j--)
{
ary[j+1] = ary[j];
}
ary[j+1] = temp;
}
TraverseArray(ary, n);
}
}
int main()
{
int i;
int n;
int *ary;
scanf("%d", &n);
ary = (int *)malloc(sizeof(int) * n);
for(i = 0; i < n; i++)
scanf("%d", ary+i);
simpleInsertSort(ary, n);
}
8639 - 折半插入排序
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
void TraverseArrary(int *ary, int n)
{
int i;
for(i = 0; i < n; i++)
printf("%d ", ary[i]);
printf("\n");
}
void binaryInsertSort(int *ary, int n)
{
int i, j, temp;
for(i = 1; i < n; i++)
{
if(ary[i] < ary[i-1])
{
temp = ary[i];
int low=0, high=i-1, mid;
while(low <= high)
{
mid = (low+high)/2;
if(ary[mid] == temp)
{
high = mid;
low = mid+1;
break;
}
else if(ary[mid] < temp)
{
low = mid+1;
}
else if(ary[mid] > temp)
{
high = mid-1;
}
}
for(j = i-1; j > high; j--)
{
ary[j+1] = ary[j];
}
ary[j+1] = temp;
}
TraverseArrary(ary, n);
}
}
int main()
{
int i;
int n;
int *ary;
scanf("%d", &n);
ary = (int *)malloc(sizeof(int) * n);
for(i = 0; i < n; i++)
scanf("%d", ary+i);
binaryInsertSort(ary, n);
}
8640 - 希尔(shell)排序
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
void TraverseArray(int *ary, int n)
{
int i;
for(i = 0; i < n; i++)
printf("%d ", ary