1 条题解

  • 0
    @ 2025-2-12 16:32:56

    希尔排序:

    #include <bits/stdc++.h>
    using namespace std;
    // 定义一个结构体来存储每个人的信息
    struct Person {
    	string gender;
    	float height;
    };
    // 自定义希尔排序函数:男生按身高从矮到高排序
    void shellSortMale(vector<Person>& males) {
    	int n = males.size();
    	// 选择增量序列
    	for (int gap = n / 2; gap > 0; gap /= 2) {
    		for (int i = gap; i < n; i++) {
    			Person temp = males[i];
    			int j = i;
    			while (j >= gap && males[j - gap].height > temp.height) {
    				males[j] = males[j - gap];
    				j -= gap;
    			}
    			males[j] = temp;
    		}
    	}
    }
    // 自定义希尔排序函数:女生按身高从高到矮排序
    void shellSortFemale(vector<Person>& females) {
    	int n = females.size();
    	// 选择增量序列
    	for (int gap = n / 2; gap > 0; gap /= 2) {
    		for (int i = gap; i < n; i++) {
    			Person temp = females[i];
    			int j = i;
    			while (j >= gap && females[j - gap].height < temp.height) {
    				females[j] = females[j - gap];
    				j -= gap;
    			}
    			females[j] = temp;
    		}
    	}
    }
    int main() {
    	int n;
    	cin >> n;	
    	vector<Person> males, females;	
    	// 读取每个人的性别和身高,并分类存储
    	for (int i = 0; i < n; i++) {
    		string gender;
    		float height;
    		cin >> gender >> height;
    		if (gender == "male") {
    			males.push_back({gender, height});
    		} else {
    			females.push_back({gender, height});
    		}
    	}	
    	// 对男生按身高从矮到高排序
    	shellSortMale(males);
    	// 对女生按身高从高到矮排序
    	shellSortFemale(females);	
    	// 输出排好队的结果,男生在前,女生在后
    	for (int i = 0; i < males.size(); i++) {
    		printf("%.2f ", males[i].height);
    	}
    	for (int i = 0; i < females.size(); i++) {
    		printf("%.2f ", females[i].height);
    	}
    	
    	return 0;
    }
    
    
    • 1

    信息

    ID
    1129
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    递交数
    10
    已通过
    5
    上传者