您的位置:首页 > 理论基础 > 数据结构算法

数据结构之直接插入排序

2017-11-13 11:34 162 查看
数据结构之直接插入排序(升序):

算法思想:

认为线性表中第一个元素有序,从第二个元素开始,与前一个元素比较大小:

(1)如果当前元素值大于前一个元素,不做任何处理;

(2)如果当前元素小于前一个元素,则应当将当前元素插入到已排序的顺序表中,将当前元素A[i]复制到A[0]中,作为哨兵。在已排序顺序表中从后往前查找待排元素的插入位置。如果已排序顺序表中的元素大于A[0],则应后移一位。

代码

#include<stdio.h>
#define ElemType int
#define maxsize 21
typedef struct{
ElemType data[maxsize];
int length;
}sqlist;
void printElem(sqlist* l)
{
int i=1;
for(i=1;i<l->length;i++)
printf("%d ",l->data[i]);
printf("\n");
}//printElem
void InsertSort(sqlist* l)
{
int i=0,j=0;
for(i=2;i<l->length;i++)
{
if(l->data[i]<l->data[i-1])
{
l->data[0]=l->data[i];             //l->data[0]为哨兵
for(j=i-1;l->data[0]<l->data[j];--j)   //和i之前的的元素比较,如果l->data[i]小,
{                                     //则不断后移元素,直到找到插入位置
l->data[j+1]=l->data[j]     ;
}
l->data[j+1]=l->data[0];         //将元素插入到最终位置
}
printf("第%d次排序后。\n",i-1);
4000
printElem(l);

}

}  //InsertSort

int main()
{
sqlist ll;
ll.data[0]=0;
ll.length=1;
int i=1;
for(i=1;i<maxsize;i++)
{
ll.data[i]=rand()%100;
ll.length++;
}
printf("未排序之前的线性表。\n");
printElem(&ll);
InsertSort(&ll);

}


运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: