描述:
输入整型数组和排序标识,对其元素按照升序或降序进行排序
数据范围: 1≤n≤1000 ,元素大小满足 0≤val≤100000
输入描述:
第一行输入数组元素个数
第二行输入待排序的数组,每个数用空格隔开
第三行输入一个整数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
说明:其实这道题很简单,但是为了回顾一下快速排序的应用,所以用了快速排序的方式。
#include<stdio.h>
#define MAXSIZE 1000
// 交换数组arr下标为i和j的值
void swap(int *arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
// 交换素组中子表的记录,使枢轴记录到位,并返回其所在位置,此时在他之前(后)均不大(小)于它)
int Partition(int *arr, int low, int high) {
int pivotkey = arr[low]; // 用子表的第一个记录作枢轴记录
while (low < high) { // 从表的两端交替向中间扫描
while (low < high && arr[high] >= pivotkey) {
high--;
}
swap(arr, low, high); // 将比枢轴记录小的交换到低端
while (low < high && arr[low] <= pivotkey) low++;
swap(arr, low, high); // 将比枢轴记录大的交换到高端
}
return low; // 返回枢轴所在位置
}
// 对数组中子序列做快速排序
void Qsort(int *arr, int low, int high) {
int pivot;
if (low < high) {
// 将arr[low...high]一分为二,算出枢轴pivot
pivot = Partition(arr, low, high);
Qsort(arr, low, pivot - 1); // 对低子表递归排序
Qsort(arr, pivot + 1, high); // 对高子表递归排序
}
}
void QuickSort(int *arr, int len) {
Qsort(arr, 0, len - 1);
}
int main() {
int n, model;
scanf("%d", &n);
int arr[MAXSIZE];
for (int i = 0; i < n; i++) {
scanf("%d ", &arr[i]);
}
scanf("%d", &model);
QuickSort(arr, n);
if (model == 0) {
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
else {
for (int i = n - 1; i >= 0; i--) {
printf("%d ", arr[i]);
}
printf("\n");
}
return 0;
}