0
点赞
收藏
分享

微信扫一扫

c语言实现快速排序

Raow1 2022-01-14 阅读 67
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_LIST_SIZE 50000
typedef int elementtype ;
typedef int keytype ;
typedef struct RedType{
	keytype key;
	elementtype e;
}RedType;
typedef struct {
  RedType r[MAX_LIST_SIZE+1];
  int length;
}SqList;
//快速排序
int Partition(SqList &L,int low,int high){
//交换顺序表L中子表r[row..high]的记录,枢轴记录到位,并返回其所在位//置,此时在它之前(后)的记录均不大(小)于它。 
//请在此处添加代码
 L.r[0]=L.r[low];
     keytype pivotkey=L.r[low].key;
	 while(low<high){
	   while(low<high&&L.r[high].key>=pivotkey)--high;
	   L.r[low]=L.r[high];
	   while(low<high&&L.r[low].key<=pivotkey)++low;
       L.r[high]=L.r[low];
	 }
	 L.r[high]=L.r[0];
	 return low;
}
 void QSort(SqList &L,int low,int high){
 //对顺序表中的子序列L.r[low..high]作快速排序。
//请在此处添加代码

if(low<high){
	 int pivotloc=Partition(L,low,high);
	 QSort(L,low,pivotloc-1);
	 QSort(L,pivotloc+1,high);
	 }
}
void  InitSq(SqList &l,int m){
	//第0单元未使用.
	int k;
	l.length=m+1;//从1-l.length存储数据,0 未用.
	for(int i=1;i<l.length;i++){			
         k=rand();
	     while(k/10000!=0){
		   k=rand();
		 }
		  l.r[i].key=k;
		}
	} 	 
void print(SqList l){
	for(int i=1;i<l.length;i++){
		printf("%d\t",l.r[i].key);
	}
	printf("\n");
}
void main(){
	srand(time(NULL));
    SqList l;
	InitSq(l,10);
    printf("排序之前:\n");
	print(l);
    QSort(l,1,10);
	printf("排序之后:\n");
	print(l);   
}
举报

相关推荐

0 条评论