题型归类-排序汇总

题目描述:

KY210 排序
描述
对输入的n个数进行排序并输出。
输入描述:
输入的第一行包括一个整数n(1<=n<=100)。 接下来的一行包括n个整数。
输出描述:
可能有多组测试数据,对于每组数据,将排序后的n个整数输出,每个数后面都有一个空格。 每组测试数据的结果占一行。

输入:
4
1 4 3 2
输出:
1 2 3 4

STL sort排序

知识点总结:

  1. sort()函数
    · 升序 sort(arr, arr + n) 或 sort(arr, arr + n, less())
    · 降序 sort(arr, arr + n, greater())

注意:默认升序,根据数组的类型 更改<>里的数据类型!

#include <iostream>
#include <cstdio>
#include <algorithm> 

using namespace std;

const int MAXN = 100;

int arr[MAXN];

int main()
{
    int n;
    while(scanf("%d", &n) != EOF) {
        for(int i = 0; i < n; ++i) {
            scanf("%d", &arr[i]);
        }
        sort(arr, arr + n);  //sort 默认升序
//         sort(arr, arr + n, greater<int>());  //降序
//         sort(arr, arr + n, less<int>());  //升序
        for(int i = 0; i < n; ++i) {
            printf("%d ", arr[i]);
        }
        printf("\n");
    }

    return 0;
}

快排

题目链接 注意此题数据范围有限制

知识点总结:

  • 浮点数表示法
  • 1e6 = 10^6 = 1000000
  • 1e5 + 10 = 100000 + 10 = 100010
#include <iostream>

using namespace std;

const int MAXN = 1e6 + 10;    //根据数据范围变动

int q[MAXN];
int n;

void quick_sort(int q[], int l, int r) 
{
    if(l >= r) return;
    
    int i = l - 1, j = r + 1;
    // int x = rand() % (r - l + 1) + l;  //使用随机点 作为分界点
    int x = q[l + r >> 1];  //使用中间点 作为分界点
    while(i < j) {
        do i ++; while (q[i] < x);
        do j --; while (q[j] > x);
        if(i < j) swap(q[i], q[j]);
    }
    
    quick_sort(q, l, j);
    quick_sort(q, j + 1, r);
}

int main()
{
    scanf("%d", &n);
    for (int i = 0; i < n; ++ i) {
        scanf("%d", &q[i]);
    }
    
    quick_sort(q, 0 , n-1);
    
    for (int i = 0; i < n; ++ i) {
        printf("%d ", q[i]);
    }
    
    return 0;
}
posted @   Jane8  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示