#include <iostream>
using namespace std;
typedef struct LNode{
int data;
struct LNode* next;
}LNode,*LinkList;
void creatLinkList(LinkList &head,int len){//头插法
head=new LNode;
head->next=NULL;
for(int i=0;i<len;i++){
LinkList node=new LNode;
cin>>node->data;
node->next=head->next;
head->next=node;
}
}
void chooseSort(LinkList head){//简单选择排序
for(LinkList p=head->next;p;p=p->next){
LinkList minNode=p;//p:当前节点,q:工作节点
for(LinkList q=p->next;q;q=q->next)
if(q->data<minNode->data)
minNode=q;
swap(p->data,minNode->data);
}
}
void insertSort(LinkList &head){//直接插入排序
for(LinkList p=head->next,q=p->next;q;q=p->next){
//q为p的后继节点
LinkList t=head;//t为工作节点,保存大于q节点的前一个节点
while(t->next->data<q->data) t=t->next;
if(t==p) {//此时节点不需要移动,跳到下一节点
p=q;
continue;
}
//将节点q插到t节点后面
p->next=q->next;
q->next=t->next;
t->next=q;
}
}
void showLinkList(LinkList head){
LinkList p=head->next;
while(p){
cout<<p->data<<" ";
p=p->next;
}
puts("");
}
int main(){
int len;//待排序元素的个数
cin>>len;
LinkList head;
creatLinkList(head,len);
//chooseSort(head);
insertSort(head);
showLinkList(head);
return 0;
}
【C++】在链式存储结构上设计简单选择排序和直接插入排序算法
于 2024-08-08 14:24:19 首次发布