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();
}
运行结果:
运行结果