数据结构直接插入排序完整算法(C语言实现)【待补充…】
第一次写博客,好丑。。。后续会改进
这里引用一篇博客写的蛮全面的(已运行)
链接[link]https://www.cnblogs.com/skywang12345/p/3596881.html
#include<stdio.h>
#define MaxSize 100
typedef int keytype;
typedef char infotype;
typedef struct {
keytype key;
infotype data;
}rectype;
void swap(rectype &x,rectype &y)
{
rectype tmp=x;
x=y;
y=tmp;
}
void creatList(rectype R[],keytype keys[],int n)
{
for(int i=0;i<n;i++)
R[i].key=keys[i];
}
void dispList(rectype R[],int n)
{
for(int i=0;i<n;i++)
printf("%d",R[i].key);
printf("\n");
}
//method 1
void insertSort(rectype a[], int n)
{
int i, j, k;
rectype tmp;
for (i = 1; i < n; i++)
{
//为a[i]在前面的a[0...i-1]有序区间中找一个合适的位置
for (j = i - 1; j >= 0; j--)
if (a[j].key< a[i].key)
break;
//如找到了一个合适的位置
if (j != i - 1)
{
//将比a[i]大的数据向后移
tmp = a[i];
for (k = i - 1; k > j; k--)
a[k + 1] = a[k];
//将a[i]放到正确位置上
a[k + 1] = tmp;
}
dispList(a,n);
}
}
//method 2
/*void insertSort(rectype R[],int n)
{
int i,j;
rectype tmp;
for(i=1;i<n;i++)
{
printf("i=%d,insert %d ",i,R[i].key);
if(R[i].key<R[i-1].key)
{tmp=R[i];
j=i-1;
do{
R[j+1]=R[j];
j--;
}while(j>=0&&R[j].key>tmp.key);
R[j+1]=tmp;
}
dispList(R,n);
}
}
*/
int main()
{ int n=7;
keytype a[]={2,4,5,6,7,1,9};
rectype R[MaxSize];
creatList(R,a,n);
printf("before:"); dispList(R,n);
insertSort(R,n);
printf("after :"); dispList(R,n);
return 1;
}