快捷搜索:  汽车  科技

c语言快速排序讲解(c语言动态数据排序)

c语言快速排序讲解(c语言动态数据排序)#include <string.h> #include <stdio.h> #include <malloc.h> /*定义int为ElemType类型*/ typedef int ElemType; /*定义链表的结点类型*/ typedef struct node{ ElemType data; /*数据域*/ struct node *next; /*指针域*/ }LNode *LinkList; /*创建一个长度为n的链表,并输入数据*/ LinkList GreatLinkList(int n){ LinkList p r list=NULL; ElemType e; int i; for(i=1;i<=n;i ){ scanf(

题目要求:

编写一个C程序,实现这样的功能:从键盘输入任意个整数,以0作为结束标志,对这个整数序列从小到大排序,并输出排序后的结果。

题目分析:

要实现动态数列排序首先要选择好数据的存储结构。如果采取静态的线性存储结构,例如数组,静态顺序表等就无法实现动态数列排序的功能。因为静态线性存储结构的内存空间开辟在内存的静态区,它是在程序编译时就分配好了的,因此无法在程序运行时改变空间的大小,也就无法实现动态数列排序的功能。因此可以选择动态的顺序表或者链表作为数据的存储结构。

#include <string.h> #include <stdio.h> #include <malloc.h> /*定义int为ElemType类型*/ typedef int ElemType; /*定义链表的结点类型*/ typedef struct node{ ElemType data; /*数据域*/ struct node *next; /*指针域*/ }LNode *LinkList; /*创建一个长度为n的链表,并输入数据*/ LinkList GreatLinkList(int n){ LinkList p r list=NULL; ElemType e; int i; for(i=1;i<=n;i ){ scanf("%d" &e); p=(LinkList)malloc(sizeof(LNode)); p->data=e; p->next=NULL; if(!list) list=p; else r->next=p; r=p; } return list; } /*向链表中插入结点,并向该结点的数据域中存放数据e*/ void insertList(LinkList *list LinkList q ElemType e){ LinkList p; p=( LinkList)malloc(sizeof(LNode)); p->data=e; if(!*list){ *list=p; p->next=NULL; } else{ p->next=q->next; q->next=p; } } /*销毁一个链表*/ void destroyLinkList(LinkList *list){ LinkList p q; p=*list; while(p){ q=p->next; free(p); p=q; } *list=NULL; } /*基于链表的冒泡排序算法*/ void Sort(LinkList q) { LNode *p=q; int t i j k=0; while(p) {k ; p=p->next;} p=q; for(i=0;i<k-1;i ) { for(j=0;j<k-i-1;j ) { if(p->data>p->next->data) { t=p->data; /*交换链表结点中的数据内容*/ p->data=p->next->data; p->next->data=t; } p=p->next; } p=q; } } /*打印出排序后的新链表中的内容*/ void Print(LinkList q) { while(q) { printf("%d " q->data); q=q->next; } } /*主函数*/ main() { ElemType e; LinkList l q; /*定义一个链表l*/ printf("Please input some integer digit and type 0 for end\n"); q=l=GreatLinkList(1); /*创建一个链表结点,q和l指向该结点*/ scanf("%d" &e); while(e) /*循环地输入数据,同时插入新生成的结点*/ { insertList(&l q e) ; q=q->next; scanf("%d" &e); } Sort(l); Print(l); destroyLinkList(&l); getche(); }

运行结果:

c语言快速排序讲解(c语言动态数据排序)(1)

运行结果

猜您喜欢: