关于#c++#的问题:n个数存放在数组中,从小到大的排序C++

n个数存放在数组中, 然后去掉大于10的数据,从小到大的排序C++

#include <iostream>
using namespace std;

int main() {
    int n, num;
    cin >> n; // 输入数组长度
    int arr[n]; // 定义数组
    for (int i = 0; i < n; i++) {
        cin >> num; // 输入第i个数
        if (num > 10) continue; // 如果大于10则跳过
        arr[i] = num; // 否则将该数存入数组中
    }
    sort(arr, arr + n); // 对数组进行排序
    for (int i = 0; i < n; i++) {
        cout << arr[i] << " "; // 输出排序后的数组元素
    }
    return 0;
}
#include <iostream>

int sort(int* arr, int n) {
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }

    for (int i = 0; i < n; i++) {
        if (arr[i] > 10) {
            return i;
        }
    }
    return n;
}
int main()
{
    cin >> n;
    int arr[n]; 
    for (int i = 0; i < n; i++) {
        cin >> arr[i];
    }
    int x = sort(arr, n);
    for (int i = 0; i < x; i++)
        cout << arr[i] << " ";
    return 0;
}
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7599597
  • 这篇博客你也可以参考下:c++把n个数从小到大进行排序。
  • 除此之外, 这篇博客: 归并排序算法详解(c++ 版 递归实现)中的 1.将长度为n序列 递归拆解 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • 假设有序列初始值为: {5,4,6,3,1,2,8,7,10}; int arr[] = {5,4,6,3,1,2,8,7,10};
    • 取中间分解点 int mid = (height+low)/2 。其中:low 为序列的起始下标 hight 为结束下标 分解点取他们中间的点
    • 递归排序 arr[low] 至 arr[mid] 区间的序列 (原序列的左侧部分)
    • 递归排序 arr[mid+1] 至 arr[hight ] 区间的序列 (原序列的右侧部分)
    • 将左边的有序的子序列 和 右边的有序子序列 排序后组合 逐个填写到原数组中(这个部分的详细内容看第二点)
    • 直到被分解的子序列长度为1 的时候 自然有序 停止递归
    • 代码如下:
    /**
     *功能:拆分有序的序列两两排序-拆解结束的条件 子序列长度为1的时候
     */
    void sortArr(int arr[], int low, int hight) {
    	if (low < hight) {
    		int mid = (hight + low) / 2;
    		sortArr(arr,low,mid);// 递归拆解左边的序列
    		sortArr(arr, mid + 1, hight);// 递归拆解左边的序列
    		mergeArr(arr, low, mid, hight);// 将两个有序的子序列(arr[low至mid]、arr[mid+1至hight] 排序合并成一个新的有序列
    	}
    }
    

    实际上当他们拆分成1个有序的子序列的时候才开始调用mergeArr 进行排序 合并 然后得到新的有序的序列(长度为2)然后返回上一层得再进行排序

  • 您还可以看一下 孙冉老师的C++入门课程课程中的 14.循环应用:求n项的和小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    要实现对数组中的数字进行排序并去掉大于10的数据,可以按照以下步骤进行:

    1. 创建一个包含n个数字的数组。
    2. 使用选择排序算法对数组中的数字进行排序。选择排序算法的基本思想是从数组中选择最小的数字放在第一个位置,然后从剩余的数字中选择最小的数字放在第二个位置,以此类推,直到所有数字都排好序。下面是一个使用选择排序算法对数组进行排序的代码示例:
    void selectionSort(int arr[], int n)
    {
        for (int i = 0; i < n-1; i++)
        {
            int minIndex = i;
            for (int j = i+1; j < n; j++)
                if (arr[j] < arr[minIndex])
                    minIndex = j;
            swap(arr[minIndex], arr[i]);
        }
    }
    
    1. 遍历排序后的数组,将大于10的数字替换为一个不存在的数字。例如,可以用-1表示不存在的数字。下面是一个遍历数组并替换大于10的数字的代码示例:
    for (int i = 0; i < n; i++)
    {
        if (arr[i] > 10)
            arr[i] = -1;
    }
    
    1. 最后,输出排序并去除大于10的数字的数组。下面是一个输出数组的代码示例:
    for (int i = 0; i < n; i++)
    {
        if (arr[i] != -1)
            cout << arr[i] << " ";
    }
    

    将以上步骤整合到一起,就可以实现对数组中的数字进行排序并去掉大于10的数据的需求。

    完整代码示例:

    #include <iostream>
    using namespace std;
    
    void selectionSort(int arr[], int n)
    {
        for (int i = 0; i < n-1; i++)
        {
            int minIndex = i;
            for (int j = i+1; j < n; j++)
                if (arr[j] < arr[minIndex])
                    minIndex = j;
            swap(arr[minIndex], arr[i]);
        }
    }
    
    int main()
    {
        int n;
        cout << "请输入数组的长度:";
        cin >> n;
    
        int arr[n];
        cout << "请输入数组的元素:";
        for (int i = 0; i < n; i++)
            cin >> arr[i];
    
        selectionSort(arr, n);
    
        for (int i = 0; i < n; i++)
        {
            if (arr[i] > 10)
                arr[i] = -1;
        }
    
        cout << "排序并去除大于10的数字的结果为:";
        for (int i = 0; i < n; i++)
        {
            if (arr[i] != -1)
                cout << arr[i] << " ";
        }
    
        return 0;
    }
    

    请注意,以上代码是基于C++的标准库而言,编译运行时需要确保编译环境正常,并按照上述步骤进行操作。