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; }