前言
提示:本篇主要是本小白大学期间对数据结构实验的一些基本代码功能实现,希望对一同数据结构的伙伴有所帮助。
一、直接排序算法
算法思想:遍历到哪一个都需对前面的数值继续比较,可以看做数组后推
再把符合要求的数值放进存储空间。
1.代码功能实现
#define N 8//定义数组长度
void show(int a[]);
void straightsort(int a[]);
int main(void)
{
int a[N]={50,36,66,76,95,12,25,36};
printf("wu xu :\n");
show(a);
printf("straightsort:\n");
straightsort(a);//调用直接插入排序寒素
return 0;
}
void show(int a[])//遍历
{
int i;
for(i=0;i<N;i++)
printf("%d\t",a[i]);
putchar('\n');
}
void straightsort(int a[])
{
int i,j,temp;
for(j=1;j<N;j++){
temp = a[j];//为temp赋值
for(i=j-1;i>=0;i--)
if(temp<a[i])//判断大小
a[i+1]=a[i]; //数组数值后移
else
break;
a[i+1] = temp;//将符合条件的数值赋给数组空间
show(a);
}
}
二、shell排序算法
shell排序算法是对直接插入算法的改进,建立于直接插入排序算法。
算法思想:
⑴对序列分组(标准:d(增量)=5)
⑵对每一组分别/交替插入排序
⑶逐渐缩小增量
1.代码功能实现
代码如下(示例):
#include<stdio.h>
#define N 10
void show(int a[]);
void shellsort(int a[]);
int main(void)
{
int a[N]={50,36,66,76,95,12,25,36,24,8};
printf("wu xu :\n");
show(a);
printf("shellsort:\n");
shellsort(a);
return 0;
}
void show(int a[])
{
int i;
for(i=0;i<N;i++)
printf("%d\t",a[i]);
putchar('\n');
}
void shellsort(int a[])
{
int d;
int i,j,temp;
for(d=N/2;d>0;d/=2){//d =d/2;
for(j=d;j<N;j++){//不断循环,直到N末尾为止
temp = a[j];//将两边靠右的中间值赋给temp;(可通过下图理解)
for(i=j-d;i>=0;i-=d)//通过循环不断将最大值赋给temp;
if(temp<a[i]
a[i+d]=a[i];
else
break;
a[i+d] = temp;//
}
show(a);
}
}
总结
>提示:本篇主要是对直接排序和shell排序算法的基本功能代码实现,代码与逻辑需要具体画图连线理解,算法中主要依靠递归,不断循环判断,最后一种快速排序算法注释理解过于麻烦,便不在本篇展示了。
希望能对你理解折半查找算法带来一定的帮助