强化阶段 Day 7 算法笔记 4.1 排序

1.选择排序

void selectsort(){
	//n次循环,每次都会使有序长度加一 
	for(int i=1;i<=n;i++){
		//k代表的是最小元素的下标,在[i,n]的区间中,先让k为左端点i 
		int k = i;
		//不断和后面的元素比较,找到最小的元素下标 
		for(int j=i+1;j<=n;j++){
			if(a[j]<a[k]){
				k = j;
			}
		}
		//交换i位置和最小元素的位置,也就是k 
		int temp=a[i];
		a[i] = a[k];
		a[k] = temp;
	}
}

2.插入排序

void insertsort(){
	//[2,n]区间的元素进行排序 
	for(int i=2;i<=n;i++){
		//用pos和temp分别记录此次需要排序的坐标和值 
		int temp=martix[i],pos=i;
		//如果pos前一个位置的值大于pos所在的值,那么pos往前移动,该值则往后移动到pos所在的位置
		//因为区间是[1,n].所以pos-1要大于等于1,所以pos要大于1
		while(temp<martix[pos-1]&&pos>1){
			martix[pos] = martix[pos-1];
			pos--;
		}
		//已经找到pos的位置,将该位置设置为一开始记录的temp值 
		martix[pos] = temp;
	}
}

3.排序题

3.1结构体的定义

3.2cmp函数

3.2.1strcmp函数以及字典序

3.2排名

4.PAT Ranking 

遇到了一个很奇怪的bug,num++的位置

#include<cstdio>
#include<vector>
#include<cstring>
#include<stack>
#include<set>
#include<queue>
#include<algorithm>
using namespace std;

struct student{
	char id[15];
	int score;
	int loc_num;
	int final_rank;
	int local_rank;
}stu[30005];

bool cmp(student a,student b){
	//如果分数不同,那么分数高的在前面 
	if(a.score!=b.score) return a.score>b.score;
	//如果分数相同,那么字典序小的在前面 
	else return strcmp(a.id,b.id)<0;
}

int main(){
	//考场数 
	int n;
	scanf("%d",&n);
	
	int loc,num=0;
	for(int i=0;i<n;i++){
		//考场号 
		scanf("%d",&loc);
		//对该考场考生的信息进行输入,顺便根据i的值把考场号输入 
		for(int j=0;j<loc;j++){
			scanf("%s %d",&stu[num].id,&stu[num].score);
			stu[num].loc_num=i+1;
			num++;
		}
		//以下是对该考场的考生进行排序
		//loc_start是该考场第一个考生在该结构体数组中的位置坐标,而num则是最后一个考生坐标+1 
		int loc_start = num-loc;
		sort(stu+loc_start,stu+num,cmp);
		stu[loc_start].local_rank=1;
		//记录名次 
		for(int j=loc_start+1;j<num;j++){
			if(stu[j].score==stu[j-1].score) stu[j].local_rank=stu[j-1].local_rank;
			else stu[j].local_rank = j-loc_start+1;
		}
	}
	//对整体进行排序,求最终名次 
	sort(stu,stu+num,cmp);
	stu[0].final_rank=1;
	for(int i=1;i<num;i++){
		if(stu[i].score==stu[i-1].score) stu[i].final_rank=stu[i-1].final_rank;
		else stu[i].final_rank=i+1;
	}
	
	printf("%d\n",num);
	for(int i=0;i<num;i++){
		printf("%s %d %d %d\n",stu[i].id,stu[i].final_rank,stu[i].loc_num,stu[i].local_rank);
	}
	
	return 0;
}

猜你喜欢

转载自blog.csdn.net/aixiaoxiao13/article/details/121886451
今日推荐