快速排序

#define maxsize 3
typedef struct{
	string name;
	int Math;
	int English;
	int Chinese;
	int key;
}student;
typedef struct{
	student r[maxsize+1];
	int length;
}Sqlist;

//初始化線性表,給線性表賦值

void creatlist(Sqlist& L){
	L.length=0;
	for(int i=1;i<=maxsize;i++){
		cin>>L.r[i].name>>L.r[i].Chinese>>L.r[i].Math>>L.r[i].English;
		L.r[i].key=L.r[i].Chinese+L.r[i].Math+L.r[i].English;
		L.length++;
	}
}

//輸出線性表

void show(Sqlist L){
		for(int i=1;i<=L.length;i++){
			cout<<"第"<<i<<"名爲:";
			 cout<<L.r[i].name<<" "<<L.r[i].Chinese<<" "<<L.r[i].Math<<" "<<L.r[i].English<<endl;    
		}
		 cout<<endl;
} 

//每一次的快速排序

int partition(Sqlist& L,int low,int high){
	L.r[0] = L.r[low];
	int 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[low] = L.r[0];//樞軸的位置(值) 
	return low; //返回樞軸 
}

//快速排序遞歸算法

void Qsort(Sqlist& L,int low ,int high){
	if(low<high){
		int pivotloc = partition(L,low,high);
		Qsort(L,low,pivotloc-1);
		Qsort(L,pivotloc+1,high);
	}
	
}

在main函數中調用

int main(){
	Sqlist b;
	creatlist(b);
	int low=1;
	int high=b.length; 
	//show(b);
	Qsort(b,low,high);
	show(b);
	
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章