首页 > 代码库 > 快速排序
快速排序
#include<stdio.h>#define MAXSIZE 100 //假设文件长度,即待排序的记录数目typedef int KeyType;typedef struct{ KeyType key;}RcdType;typedef struct{ RcdType R[MAXSIZE+1];//存储待排序记录的一维数组,R或作为[0]闲置或作为“哨兵使用 int length;}SortSqlist;//关键字类型为KeyType自己定义int partition(SortSqlist &L,int low,int high){ //以R[low]为“枢猪”,对顺序表L的子表R[low]~R[high]进行一趟快速排序 //函数返回“枢猪”的最终位置 KeyType pivotkey; L.R[0]=L.R[low]; pivotkey=L.R[low].key; while(low<high){//从表的两端交替向中间扫描 while(low<high&&L.R[high].key>=pivotkey)high--; L.R[low]=L.R[high];//将比“枢猪”记录小的记录移到低端low while(low<high&&L.R[low].key<=pivotkey)low++; L.R[high]=L.R[low];//将比“枢猪”记录大的记录移到端高high } L.R[low]=L.R[0];//枢猪记录到位 return low;//返回枢猪位置}void QSort(SortSqlist &L,int low,int high){//对顺序表L的子表R[low]~R[high]进行快速排序 int pivotLoc; if(low<high){ pivotLoc=partition(L,low,high); QSort(L,low,pivotLoc-1);//对低子表递归排序 QSort(L,pivotLoc+1,high);//对高子表递归排序 }}void QuickSort(SortSqlist &L){//对顺序表L做快速排序QSort(L,1,L.length);}int main(){ int i; SortSqlist L; printf("输入排序的个数"); scanf("%d",&L.length); for(i=1;i<=L.length;++i) scanf("%d",&L.R[i].key); QuickSort(L); for(i=1;i<=L.length;++i) printf("%d ",L.R[i].key); return 0;}
快速排序
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。