前言
复习排序一章时,对比回顾单链表与数组的不同写法
正文
顺序表
网上详解资料太多了
void insertSort(int *arr,int len)
{
int tmp,i,j;
for (i = 1;i < len;i++)
{
tmp = arr[i]; //保存待排序的此数
for (j = i - 1;j >= 0 && arr[j] > tmp;j--) //从后往前查找
{
arr[j + 1] = arr[j]; //向后挪位
}
arr[j + 1] = tmp; //复制到插入位置
}
}
单链表
void insertsort(linklist &L){
LNode *p=L->next,*pre;
LNode *r=p->next; //r 保持p 的后继结点
p->next=null; //构造只含有一个数据结点的有序表
p=r;
while(p!=NULL){
pre=L; //从头开始遍历
r=p->next;
while(pre->next!=NULL&&pre->next->data<p->data)
pre=pre->next; //在有序表中查找待插入p的前驱结点pre
p->next=pre->next; //插入结点P
pre->next=p;
p=r; //继续扫描下一个
}
}
单链表和顺序表的插入排序算法如书上所说的:
顺序表需要从后往前扫描找到合适的插入位置
单链表由于其特性可以直接从前往后扫描找到合适的插入位置