线性表排序
2015-10-22 20:55
302 查看
1.顺序表
2.链表
#include<stdio.h> #include<stdlib.h> #define MAX 20 typedef struct { int elem[MAX]; int length; }Seqlist; Seqlist Initlist()//顺序表的初始化 { Seqlist L;//定义一个顺序表 L.length = 0; return L; } Seqlist Create(Seqlist L)//顺序表的建立 { int x; //printf("输入元素,输入-1时结束输入"); scanf_s("%d", &x); while (x != -1) { L.elem[L.length] = x; L.length++; scanf_s("%d", &x); } printf("创建成功\n"); return L; } Seqlist Paixu(Seqlist L)//使用冒泡法进行排序 { int i, j, t; for (i = 0; i<L.length - 1; i++) for (j = 0; j<L.length - 1 - i; j++) { if (L.elem[j]>L.elem[j + 1]) { t = L.elem[j]; L.elem[j] = L.elem[j + 1]; L.elem[j + 1] = t; } } return L; } void outline(Seqlist L) { int i = 0; for (i = 0; i<L.length; i++) { printf("%2d", L.elem[i]); } } Seqlist Merge(Seqlist La, Seqlist Lb) { Seqlist Lc; int i = 0, k = 0, j = 0; while (i<La.length&&j<Lb.length) { if (La.elem[i]<Lb.elem[j]) Lc.elem[k++] = La.elem[i++]; else Lc.elem[k++] = Lb.elem[j++]; } while (i<La.length) Lc.elem[k++] = La.elem[i++]; while (j<Lb.length) Lc.elem[k++] = Lb.elem[j++]; Lc.length = k; return Lc; } int main() { Seqlist La, Lb,Lc; La = Initlist(); Lb = Initlist();//对La,Lb初始化 printf("创建La,当输入-1时终止\n"); La = Create(La); printf("经排序后La的元素为:"); La=Paixu(La); outline(La); printf("\n创建Lb,当输入-1时终止\n"); Lb = Create(Lb); printf("经排序后Lb的元素为:"); Lb=Paixu(Lb); outline(Lb); Lc = Merge(La, Lb); printf("\nLc的元素为:"); outline(Lc); return 0; }
2.链表
#include <stdio.h> #include <stdlib.h> struct Lnode { int data; struct Lnode *next; }; struct Lnode *CreatEND()//尾插法建立链表 { struct Lnode *head,*p,*p2; int x; head=(struct Lnode *)malloc(sizeof(struct Lnode)); head->next=NULL; p=head; printf("输入元素,-1停止:"); scanf("%d",&x); while(x!=-1) { p2=(struct Lnode *)malloc(sizeof(struct Lnode)); p2->data=x; p->next=p2; p=p->next; scanf("%d",&x); } p->next=NULL; return head; }; struct Lnode *Paixu(struct Lnode *head)//进行选择排序 { struct Lnode *p,*q,*small; int temp; for(p = head->next; p->next != NULL; p = p->next) { small = p; for(q = p->next; q; q = q->next) { if(q->data < small->data) { small = q; } } if(small != p) { temp = p->data; p->data = small->data; small->data = temp; } } return head; } void Outline(struct Lnode *head)//输出链表元素 { struct Lnode *p; p=head->next; while(p!=NULL) { printf(" %d ",p->data); p=p->next; } } struct Lnode *MergeList(struct Lnode *La,struct Lnode *Lb,struct Lnode *Lc) { struct Lnode *a,*b,*c; a=La->next;b=Lb->next; Lc=La; c=Lc; while(a&&b) { if(a->data<=b->data) { c->next=a; c=c->next; a=a->next; } else { c->next=b; c=c->next; b=b->next; } } c->next=a?a:b; return Lc; } int main() { struct Lnode *La,*Lb,*Lc; La=Lb=Lc=NULL; printf("创建La\n"); La=CreatEND(); Outline(La); La=Paixu(La); printf("\n经排序后元素为:"); Outline(La); printf("\n创建Lb\n"); Lb=CreatEND(); Lb=Paixu(Lb); printf("经排序后元素为:"); Outline(Lb); Lc=MergeList(La,Lb,Lc); printf("\n归并排序后LC元素:"); Outline(Lc); return 0; }妈的,给单链表排个序这么难吗,网上都是些什么啊,罗里吧嗦的还没成果,不对就不要乱发,真是的,我实在是心情不好,浪费这么多时间。
相关文章推荐
- 文件遍历排序函数
- C#选择排序法实例分析
- C#插入法排序算法实例分析
- C#实现Datatable排序的方法
- SQLSERVER的排序问题结果不是想要的
- Windows Powershell排序和分组管道结果
- C#通过IComparable实现ListT.sort()排序
- C#选择法排序实例分析
- SQL学习笔记四 聚合函数、排序方法
- C#对list列表进行随机排序的方法
- 一根网线内的8根线哪4根是传输数据的,哪四根是防干扰的
- C#折半插入排序算法实现方法
- SQL进行排序、分组、统计的10个新技巧分享
- C++实现位图排序实例
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析
- SQL行号排序和分页(SQL查询中插入行号 自定义分页的另类实现)
- PHP下对数组进行排序的函数
- PHP数组排序之sort、asort与ksort用法实例
- php通过asort()给关联数组按照值排序的方法