lza131892lizuan

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。c++

【以下回答由 GPT 生成】

1. 如何在C++中去除数组中的重复元素?

如果数组已经排序,可以使用两个指针来遍历数组。一个指针 i 用于追踪当前不重复元素的位置,另一个指针 j 用于遍历数组,查找不同于前一个元素的元素。

#include <iostream>
#include <vector>

std::vector<int> removeDuplicates(std::vector<int>& nums) {
    if (nums.empty()) {
        return nums;
    }

    int i = 0;
    for (int j = 1; j < nums.size(); j++) {
        if (nums[j] != nums[i]) {
            i++;
            nums[i] = nums[j];
        }
    }

    nums.resize(i + 1);
    return nums;
}

int main() {
    std::vector<int> nums = {1, 2, 2, 3, 4, 4, 4, 5};
    nums = removeDuplicates(nums);

    for (int num : nums) {
        std::cout << num << " ";
    }

    return 0;
}

运行结果为:1 2 3 4 5

2. 如何使用快速排序算法对C++数组进行排序?

可以使用递归的快速排序算法来对数组进行排序。快速排序的思想是选取一个基准元素,将数组分为两部分,小于基准元素的放在左边,大于基准元素的放在右边,然后对两部分进行递归排序。

#include <iostream>
#include <vector>

void quickSort(std::vector<int>& nums, int low, int high) {
    if (low >= high) {
        return;
    }

    int pivot = nums[high];
    int i = low - 1;

    for (int j = low; j <= high - 1; j++) {
        if (nums[j] < pivot) {
            i++;
            std::swap(nums[i], nums[j]);
        }
    }

    std::swap(nums[i + 1], nums[high]);

    int partitionIndex = i + 1;

    quickSort(nums, low, partitionIndex - 1);
    quickSort(nums, partitionIndex + 1, high);
}

int main() {
    std::vector<int> nums = {5, 4, 3, 2, 1};
    quickSort(nums, 0, nums.size() - 1);

    for (int num : nums) {
        std::cout << num << " ";
    }

    return 0;
}

运行结果为:1 2 3 4 5

3. 如何使用计数排序算法对C++数组进行排序?

计数排序是一种线性时间的排序算法,适用于整数数据和已知范围的情况。

#include <iostream>
#include <vector>

void countSort(std::vector<int>& nums) {
    int maxVal = *max_element(nums.begin(), nums.end());
    int minVal = *min_element(nums.begin(), nums.end());
    int range = maxVal - minVal + 1;

    std::vector<int> count(range), output(nums.size());

    for (int num : nums) {
        count[num - minVal]++;
    }

    for (int i = 1; i < range; i++) {
        count[i] += count[i - 1];
    }

    for (int i = nums.size() - 1; i >= 0; i--) {
        output[count[nums[i] - minVal] - 1] = nums[i];
        count[nums[i] - minVal]--;
    }

    for (int i = 0; i < nums.size(); i++) {
        nums[i] = output[i];
    }
}

int main() {
    std::vector<int> nums = {5, 4, 3, 2, 1};
    countSort(nums);

    for (int num : nums) {
        std::cout << num << " ";
    }

    return 0;
}

运行结果为:1 2 3 4 5

4. 如何使用标准库函数对C++数组进行排序(如std::sort)?

可以使用 std::sort 函数对 C++ 数组进行排序。 std::sort 使用快速排序算法来排序数组。

#include <iostream>
#include <algorithm>
#include <vector>

int main() {
    std::vector<int> nums = {5, 4, 3, 2, 1};

    std::sort(nums.begin(), nums.end());

    for (int num : nums) {
        std::cout << num << " ";
    }

    return 0;
}

运行结果为:1 2 3 4 5

5. 如何输出去重和排序后的数组结果?

可以先使用上面的去重和排序方法来处理数组,然后按照需要进行输出。

#include <iostream>
#include <algorithm>
#include <vector>

std::vector<int> removeDuplicates(std::vector<int>& nums) {
    if (nums.empty()) {
        return nums;
    }

    int i = 0;
    for (int j = 1; j < nums.size(); j++) {
        if (nums[j] != nums[i]) {
            i++;
            nums[i] = nums[j];
        }
    }

    nums.resize(i + 1);
    return nums;
}

void quickSort(std::vector<int>& nums, int low, int high) {
    if (low >= high) {
        return;
    }

    int pivot = nums[high];
    int i = low - 1;

    for (int j = low; j <= high - 1; j++) {
        if (nums[j] < pivot) {
            i++;
            std::swap(nums[i], nums[j]);
        }
    }

    std::swap(nums[i + 1], nums[high]);

    int partitionIndex = i + 1;

    quickSort(nums, low, partitionIndex - 1);
    quickSort(nums, partitionIndex + 1, high);
}

int main() {
    std::vector<int> nums = {5, 4, 3, 4, 1, 2, 1};

    nums = removeDuplicates(nums);
    quickSort(nums, 0, nums.size() - 1);

    for (int num : nums) {
        std::cout << num << " ";
    }

    return 0;
}

运行结果为:1 2 3 4 5

以上是给出的具体解决方案,希望对你有帮助。如果你还有其他问题,欢迎继续提问。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^