数据结构快速排序

快速排序
基本思想:通过一趟排序,将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录进行排序,以达到整个序列有序
排序过程:对r[s……t]中记录进行一趟快速排序,附设两个指针low和high,设枢轴记录rp=r[s],x=rp.key
初始时令low=s,high=t
首先从high所指位置向前搜索第一个关键字小于x的记录,并和rp交换
再从low所指位置起向后搜索,找到第一个关键字大于x的记录,和rp交换
重复上述两步,直至low==high为止
再分别对两个子序列进行快速排序,直到每个子序列只含有一个记录为止


快速排序程序:

#include<stdio.h>  
#define SIZE 200  
typedef struct{  
int key;  
int next;  
}SLNOde;  
typedef struct{  
SLNOde r[SIZE];  
int length;  
}Sqlist;  
int Patition(Sqlist &L,int low,int high)  
{  
int pi;  
L.r[0]=L.r[low];  
pi=L.r[low].key;  
while(low<high)  
{  
while(low<high&&L.r[high].key>=pi)  
--high;  
L.r[low].key=L.r[high].key;  
while(low<high&&L.r[low].key<=pi)  
++low;  
L.r[high].key=L.r[low].key;  
}  
L.r[low].key=L.r[0].key;  
return low;  
}  
void Qsort(Sqlist &L,int low,int high)  
{  
int pi;  
if(low<high)  
{  
pi=Patition(L,low, high);  
Qsort(L, low,pi-1);  
Qsort(L, pi+1,high);  
}  
}  
void Quicksort(Sqlist &L)  
{  
Qsort(L, 1,L.length);  
}  
void main()  
{  
int i;  
Sqlist L;  
printf("请输入待排序的总长度:\n");  
scanf("%d",&L.length);  
printf("请输入%d个数:\n",L.length);  
for(i=1;i<=L.length;i++)  
{  
scanf("%d",&L.r[i].key);  
}  
   Quicksort(L);  
printf("输出快速排序后的序列:\n");  
for(i=1;i<=L.length;i++)  
{  
printf(" %d",L.r[i].key);  
}  
printf("\n");  
   
}  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值