列表

详情


HJ101. 输入整型数组和排序标识,对其元素按照升序或降序进行排序

描述

输入整型数组和排序标识,对其元素按照升序或降序进行排序

数据范围: ,元素大小满足

输入描述

第一行输入数组元素个数
第二行输入待排序的数组,每个数用空格隔开
第三行输入一个整数0或1。0代表升序排序,1代表降序排序

输出描述

输出排好序的数字

示例1

输入:

8
1 2 4 9 3 55 64 25
0

输出:

1 2 3 4 9 25 55 64

示例2

输入:

5
1 2 3 4 5
1

输出:

5 4 3 2 1

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C 解法, 执行用时: 1ms, 内存消耗: 364KB, 提交时间: 2021-06-14

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

static void QuickSort(int *data, int start, int end, int isDis)
{
    int i = start;
    int j = end;
    int target = data[i];
    int sa = isDis == 0 ? 1 : -1;

    if (i >= j) {
        return;
    }
    while (i < j) {
        /* 从右往左找值 */
        /* 升序data[j] - target > 0   降序 target - data[j] > 0*/
        while ((i < j) && ((data[j] - target) * sa > 0)) {
            j--;
        }
        if (i < j) {
            data[i++] = data[j];
        }
        
        /* 从左往右找值 */
        while ((i < j) && ((data[i] - target) * sa) < 0) {
            i++;
        }
        if (i < j) {
            data[j--] = data[i];
        }
    }
    data[i] = target;
    QuickSort(data, start, i - 1, isDis);
    QuickSort(data, j + 1, end, isDis);
}


int main(int argc, const char *argv[])
{
    int num, isDis, i;
    int *data = NULL;

    while (scanf("%d", &num) != EOF) {
        if (num <= 0) {
            printf("input error.\n");
            return -1;
        }
        data = (int *)malloc(sizeof(int) * num);
        if (data == NULL) {
            printf("malloc data fail.\n");
            return -1;
        }
        memset(data, 0, sizeof(int) * num);
        for (i = 0; i < num; i++) {
            scanf("%d", &data[i]);
        }
        scanf("%d", &isDis);
        QuickSort(data, 0, num - 1, isDis);
        for (i = 0; i < num; i++) {
            printf("%d ", data[i]);
        }
        printf("\n");
        free(data);
        data = NULL;
    }
    return 0;
}

C++ 解法, 执行用时: 1ms, 内存消耗: 376KB, 提交时间: 2020-07-07

#include <iostream>
#include <vector>
#include <algorithm>
 
using namespace std;
 
int main()
{
    int N;
    while (cin >> N){
    
    vector <int> array(N);
     
    for (int i = 0; i < N; ++i)
        cin >> array[i];
    int mode;
    cin >> mode;
    sort (array.begin(), array.end());
    
   if (mode == 1)
       reverse (array.begin(), array.end());
     
     
       for (int i = 0; i < array.size() - 1; ++i)
        cout << array[i] << " ";
        cout << array[N-1] << endl;
    }
   return 0;    
}

上一题