-
直接插入排序的思想,就是先默认第一个元素是排序好的,在顺序表中,从后面往前依次进行比较,从而进行排序。但是在单链表中,从后面遍历的话,找结点的前驱非常困难。故从头进行遍历。
-
待排序链表(进行逆序排序)
-
将头节点与第一个元素保留,其后元素断开(头用curr指针)
-
用临时指针pre与r,指向头节点与第一元素
-
遍历curr所指链表,一个节点一个节点进行插入操作
-
第一次插入
从r开始与curr节点比较,若curr->data < r->data (逆序排序哦),则将pre,与r都向后移动一位,第一次3>1不必,直接插入,把curr插入到pre与r之间(两个指针方便),注意curr指针插入的时候用一个临时变量去操作,curr直接指向后继。
插入完成后指针归位
-
第二次插入
比较大小,移动pre与r指针,从r开始与curr节点比较,若curr->data < r->data (逆序排序哦),则将pre,与r都向后移动一位
将curr节点插入pre与r之间
插入完成后调整curr,下一个节点操作之前调整pre,r -
循环操作直到curr指向NULL
接下来上代码
//输入整数,以空格隔开,已-1为结束输入标志
#include
#include
typedef struct node{
struct node *next;
int data;
}node;
node* creat()
{
int in;
node *head=(node*)malloc(sizeof(node));
node *p,*curr;
head->next=NULL;
curr=head;
scanf("%d",&in);
while(in!=-1)
{
p=(node*)malloc(sizeof(node));
p->data=in;
p->next=NULL;
curr->next=p;
curr=curr->next;
scanf("%d",&in);
}
return head;
}
void insert_sort(node *head)
{
node *curr=head->next->next;
node *temp,*pre,*r;
head->next->next=NULL;
while(curr)
{
pre=head;
r=head->next;
while(r!=NULL && curr->datadata)
{
pre=pre->next;
r=r->next;
}
temp=curr;
curr=curr->next;
pre->next=temp;
temp->next=r;
}
}
int main()
{
node *L,*p;
L=creat();
insert_sort(L);
p=L->next;
while(p)
{
printf("%d ",p->data);
p=p->next;
}
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 运行结果
需要配置yolov5的权重pt文件转换成onnx的,请点击以下链接:
1.ncnn环境搭建, 准备基础环境
sudo apt install build-essential libopencv-dev cmake
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)">
评论记录:
回复评论: