首页 > 试题广场 >

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

[编程题]输入整型数组和排序标识,对其元素按照升序或降序进行排序
  • 热度指数:223849 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
输入整型数组和排序标识,对其元素按照升序或降序进行排序

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

输入描述:

第一行输入数组元素个数
第二行输入待排序的数组,每个数用空格隔开
第三行输入一个整数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>
#include <stdlib.h>
void swap(int *a, int *b) {
    int c = *a;
    *a = *b;
    *b = c;
}
void sort_arr(int arr[], int num, int sort) {
    if (sort == 0) {
        for (int i = 0; i < num - 1; i++) {
            for (int j = 0; j < num - 1 - i; j++) {
                if (arr[j] > arr[j+1]) {
                    swap(&arr[j], &arr[j+1]);
                }
            }
        }
    } else if(sort == 1) {
        for (int i = 0; i < num - 1; i++) {
            for (int j = 0; j < num - 1 - i; j++) {
                if (arr[j] < arr[j+1]) {
                    swap(&arr[j], &arr[j+1]);
                }
            }
        }
    }
}
int main() {
    int num = 0, sort = 0, i = 0;
    scanf("%d", &num);
    int *arr=(int*)malloc(num*sizeof(int)); //使用动态数组实现自由指定数组长度
    if(arr == NULL){
        perror("malloc failed");
        return 1;
    }
    for (i = 0; i < num; i++) {
        scanf("%d\n", &arr[i]);
    }
    scanf("%d", &sort);
    sort_arr(arr, num, sort);
    for (i = 0; i < num; i++) {
        printf("%d ", arr[i]);
    }
    free(arr);
    return 0;
}
发表于 2024-10-08 23:12:47 回复(0)
#include <stdio.h>

int main() {
    int a,b;
    int x[1000];
    scanf("%d", &a);
    for (int i = 0; i < a; i++) {
        scanf("%d", &x[i]);
    }
    scanf("%d", &b);
    for (int i = 0; i < a-1; i++) {
        for(int j = 0; j < a-i-1; j++)
        {
            if (x[j] > x[j+1]) {
                int mid = x[j];
                x[j] = x[j+1];
                x[j+1] = mid;
            }
        }
    }
    if (b == 0) {
        for (int i = 0; i < a; i++) {
            printf("%d ", x[i]);
        }
    }
    else {
        for (int i = a-1; i >= 0; i--) {
            printf("%d ", x[i]);
        }
    }
    return 0;
}
发表于 2024-06-05 17:10:04 回复(0)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int compar(const void* a, const void* b)
{
    return (*(int*)a) - (*(int*)b);
}
int compar2(const void* a, const void* b)
{
    return (*(int*)b) - (*(int*)a);
}
int main() {
    int n=0,flag=0;
    int val[1000]={0};
    scanf("%d", &n);
    for(int i=0; i<n; i++)
    {
        scanf("%d", &val[i]);
    }
    scanf("%d", &flag);
    if(flag == 0)
    qsort(val, n, sizeof(int), compar);
    else
    qsort(val, n, sizeof(int), compar2);

    for(int i=0; i<n; i++)
    printf("%d ", val[i]);
}

发表于 2024-06-04 21:55:54 回复(0)
#include "stdio.h"
#include "string.h"
void upper_bubble_sort(int arr[], int length)//升序冒泡排列:参数:数组和数据长度
{
    int a ,b ,temp;
    for(a = 0; a < length-1; a++)
    {
        for(b = 0; b < length-a-1; b++)
        {
            if(arr[b] > arr[b+1])
            {
                temp = arr[b];
                arr[b] = arr[b+1];
                arr[b+1] = temp;
            }
        }
    }
}
int main()
{
    int i,flag,c;//i:数组元素个数;flag:升降序排列标志位
    int str[1000];//定义数组
    scanf("%d", &i);
    for(c = 0; c < i; c++)
    {
        scanf("%d", &str[c]);
    }
    scanf("%d", &flag);
    upper_bubble_sort(str, i);
    if(flag == 0)//从小到大(升序)排列
    {
        for(c = 0; c < i; c++)
        {
            printf("%d ", str[c]);
        } 
    }
    else 
    {
        for(c = i-1; c >= 0; c--)
        {
            printf("%d ", str[c]);
        }
    }
}


发表于 2024-03-21 22:22:37 回复(0)
#include <stdio.h>
#include <string.h>
int main() {
    int num;
    int val[1000];
    int flag;
    scanf("%d",&num);
    for(int i=0;i<num;i++){
        scanf("%d ",&val[i]);
    }
    scanf("%d",&flag);
    for(int i=0;i<num;i++){  //用个冒泡排序来实现升序降序
        for(int j=i+1;j<num;j++){
            if(val[i]>val[j]){
                int tmp=val[i];
                val[i]=val[j];
                val[j]=tmp;
            }
        }
    }
    if(flag==0){//是0的话,那刚好满足刚才冒泡排序的升序
        for(int i=0;i<num;i++){
            printf("%d ",val[i]);
        }
       
       
    }
    else{//是1的话,要将刚才的升序倒着输出,那就把得到的升序数组倒着输出
        for(int i=0;i<num;i++){
            printf("%d ",val[num-i-1]);
        }
       
       
    }
   
    return 0;
}
 
编辑于 2024-03-13 19:15:02 回复(0)
#include <stdio.h>

int main() {
    int n;
    while (scanf("%d", &n) != EOF) { // 注意 while 处理多个 case
        int arr[n];
        for(int i=0;i<n;i++){
            scanf("%d",&arr[i]);
        }
        int type;
        scanf("%d",&type);

        for(int i=0;i<n-1;i++){
            for(int j=0;j<n-i-1;j++){
                if(arr[j]>arr[j+1]){
                    int tmp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=tmp;
                }
            }
        }
        if(type==0){
             for(int i=0;i<n;i++){
                printf("%d ",arr[i]);
             }
        }
        else if(type==1){
            for(int i=n-1;i>=0;i--){
                printf("%d ",arr[i]);
             }
        }

    }
    return 0;
}
发表于 2024-02-18 16:20:50 回复(0)
# include <stdio.h>
# include<stdlib.h>
int cmp (const void * a, const void * b)
{
  return ( *(int*)a - *(int*)b );
}
int cmp1 (const void * a, const void * b)
{
  return ( *(int*)b - *(int*)a);
}
int main() {
    int n, b, arr[100000];
    scanf("%d",&n);
    for(int i = 0; i<n; i++)scanf("%d",&arr[i]);
    scanf("%d",&b);
    if(b) qsort(arr, n, sizeof(int), cmp1);
    else
        qsort(arr, n, sizeof(int), cmp);
    for(int i = 0; i<n; i++){
        printf("%d ",arr[i]);
    }
    return 0;
}

编辑于 2023-12-02 15:19:10 回复(0)
#include <stdio.h>

void BubbleSort(int arr[],int n,int flag)
{
    for(int i = 0;i<n-1;i++)
    {
        for(int j = 0;j<n-1-i;j++)
        {
            if(flag == 0)//升序
            {
                if(arr[j]-arr[j+1]>0)
                {
                    int tmp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = tmp;
                }
            }
            if(flag == 1)//降序
            {
                if(arr[j]-arr[j+1]<0)
                {
                    int tmp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = tmp;
                }
            }
        }
    }
}

int main() {
    int n = 0;
    int arr[1000] = {0};
    scanf("%d",&n);
    for(int i = 0;i<n;i++)
    {
        scanf("%d",&arr[i]);
    }
    int flag = 0;
    scanf("%d",&flag);
    BubbleSort(arr,n,flag);
    for(int i = 0;i<n;i++)
    {
        printf("%d ",arr[i]);
    }
    return 0;
}
发表于 2023-10-11 12:14:11 回复(0)
#include <stdio.h>

int q[1000];

void sort(int * q, int l, int r){
    if(l>=r) return;
    int i=l-1, j=r+1;
    int x=q[(l+r)/2];
    while(i<j){
        do i++;
        while(q[i]<x);
        do j--;
        while(q[j]>x);
        if(i<j){
            int t = q[i];
            q[i] = q[j];
            q[j] = t;
        }
    }
    sort(q, l, j);
    sort(q, j+1, r);
}

int main() {
    int n, p;
    scanf("%d", &n);
    for(int i=0; i<n; i++) scanf("%d ", &q[i]);
    scanf("%d", &p);
    sort(q, 0, n-1);
    if(p==0){
        for(int i=0; i<n; i++) printf("%d ",q[i]);  
    }else{
        for(int i=n-1; i>=0; i--) printf("%d ",q[i]);
    }
    return 0;
}
发表于 2023-04-03 00:02:51 回复(0)
#include <stdio.h>

int cmp1(const void *a,const void *b)
{
    if(*(int*)a>*(int*)b)return 1;
    else return -1;
}
int cmp2(const void *a,const void *b)
{
    if(*(int*)a<*(int*)b)return 1;
    else return -1;
}
int main()
{
    int n=0;
    scanf("%d",&n);
    int num[n];
    for(int i=0;i<n;i++)
    {
        scanf("%d",&num[i]);
    }
    int k;
    scanf("%d",&k);
    if(k==0)
    {
        qsort(num,n,sizeof(int),cmp1);
    }
    else {
        qsort(num,n,sizeof(int),cmp2);
    }
    for(int i=0;i<n;i++)
    {
        printf("%d ",num[i]);
    }
    return 0;
}
发表于 2023-03-19 13:17:51 回复(0)
#include <stdlib.h>
#include <stdio.h>
int mycompare(void *a, void *b){
    return(*(int *)a - *(int *)b);    
}
int main(void) {
    
    int n = 0;
    scanf("%d",&n);
    int num[n];int i = 0;
    for(i=0;i<n;i++){
        scanf("%d",&num[i]);
    }
    int jojo = 0;
    scanf("%d",&jojo);
    qsort(num,n,sizeof(int),mycompare);
    if(jojo == 0){
        for(i=0; i<n;i++){
            printf("%d ",num[i]);
        }
    } else{
        for(i=n-1; i>-1;i--){
            printf("%d ",num[i]);
        }
    }
}

发表于 2022-08-24 18:00:11 回复(0)
int cmp1(const void *a, const void *b){
    int *i = (int *)a;
    int *j = (int *)b;
    
    return *i-*j;
}
int cmp2(const void *a, const void *b){
    int *i = (int *)a;
    int *j = (int *)b;
    
    return *j-*i;
}

int main()
{
    int m,n,k;
    scanf("%d",&m);
    int *str = (int *)malloc(sizeof(int)*m);
    for(int i = 0;i<m;i++){
        scanf("%d",&str[i]);
    }
    scanf("%d",&k);
    
    if(k == 1){
       qsort(str,m,sizeof(int),cmp2); 
    } else{
        qsort(str,m,sizeof(int),cmp1); 
    }
    
    for(int j = 0;j<m;j++){
        printf("%d ",str[j]);
    }
    
    return 0;
}
发表于 2022-04-22 20:26:52 回复(0)
#include <stdio.h>
void selection_sort(int a[], int len);
void Inversion(int arr[], int len);
int main() {
    int n;
    scanf("%d", &n);
    int value[n];
    for (int i = 0; i < n; i++)
        scanf("%d", &value[i]);
    int flag;
    scanf("%d", &flag);
    selection_sort(value,n);
    if (flag == 0)
        for (int i = 0; i < n; i++)
            printf("%d ",value[i]);
    else if(flag == 1)
        for (int i = n - 1; i >= 0; i--)
            printf("%d ",value[i]);
    return 0;
}
/* 升序选择排列
 * 
 */ 
void selection_sort(int a[], int len) {
    int i,j,temp;
 
    for (i = 0 ; i < len - 1 ; i++) 
    {
        int min = i;                  // 记录最小值,第一个元素默认最小
        for (j = i + 1; j < len; j++)     // 访问未排序的元素
        {
            if (a[j] < a[min])    // 找到目前最小值
            {
                min = j;    // 记录最小值
            }
        }
        if(min != i)
        {
            temp=a[min];  // 交换两个变量
            a[min]=a[i];
            a[i]=temp;
        }
    }
}

发表于 2022-04-20 02:12:10 回复(0)
#include <stdio.h>
int main()
{
    int a,b;
    while(scanf("%d",&a)!=EOF)
    {
        int c[a];
        for(int i=0;i<a;i++)
        {
            scanf("%d",&c[i]);

        }
        scanf("%d",&b);
        if(b==1)
        {
            for(int i=0;i<a;i++)
            {
                for(int j=i+1;j<a;j++)
                {
                    int u;
                    if(c[i]<c[j])
                    {
                        u=c[i];
                        c[i]=c[j];
                        c[j]=u;
                        
                        
                    }
                       
                    
                }
                 printf("%d ",c[i]);
            }
        }
           else if(b==0)
           {
                 for(int i=0;i<a;i++)
            {
                for(int j=i+1;j<a;j++)
                {
                    int u;
                    if(c[i]>c[j])
                    {
                        u=c[i];
                        c[i]=c[j];
                        c[j]=u;
                        
                        
                    }
                    
            }
            
            
            
           printf("%d ",c[i]);
        }
           }
    }

    
    
}
发表于 2022-03-19 22:45:37 回复(0)
#include<stdio.h>

int main(){
    int n;
    int flag;
    scanf("%d", &n);
    int num[n];
    for(int i=0; i<n; i++){
        scanf("%d", &num[i]);
    }
    scanf("%d", &flag);
    if(flag == 0){//small to big
        for(int i=0; i<n; i++){
            for(int j=i+1; j<n; j++){
                if(num[i] > num[j]){
                    int temp;
                    temp = num[i];
                    num[i] = num[j];
                    num[j] = temp;
                }
            }
        }
    }else{        //big to small
        for(int i=0; i<n; i++){
            for(int j=i+1; j<n; j++){
                if(num[i] < num[j]){
                    int temp;
                    temp = num[i];
                    num[i] = num[j];
                    num[j] = temp;
                }
            }
        }
    }
    printf("%d",num[0]);
    for(int i=1; i<n; i++){
        printf(" %d", num[i]);
    }
    return 0;
}
发表于 2022-03-10 17:02:37 回复(0)
啥情况啊 本地运行咋都是对的
#include<stdio.h>
int main()
{
    int n = 0,flag,i = 0,j = 0,temp = 0;
    char str[1000];
    scanf("%d\n",&n);
for(i = 0;i <n; i++){
        scanf("%d",&str[i]);
}
    scanf("%d\n",&flag);
    for(i = 0;i < n-1; i++)
    {
        for(j = i+1;j <n;j++)
        {
            if(str[i] < str[j])
            {
                temp = str[i];
                str[i] = str[j];
                str[j] = temp;
            }
        }
    }

if(flag == 1)
{    for(i = 0;i < n; i++){
            printf("%d ",str[i]);
        }
}
if(flag == 0)
{
    for(i = 0;i<n;i++){
        printf("%d ",str[n-i-1]);
    }
}
    return 0;
}


发表于 2021-11-30 23:53:07 回复(1)
被这输入输出给整怕了。。。
#include <stdio.h>
#include <stdlib.h>

int flag=0;

int funcmp(const void *a,const void *b){
    int x=0;
    int x1=*((int*)a),x2=*((int*)b);
    if(flag){
        x=x2-x1;
    }else{
        x=x1-x2;
    }
    return x;
}

void fun(int *arr,int n){
        qsort(arr,n, sizeof(int),funcmp);
        for(int j=0;j<n;j++){
            printf("%d ",arr[j]);
        }
        printf("\n");
}

int main(){
    int n;
    while(scanf("%d",&n)!=EOF){
        int arr[n];
        for(int i=0;i<n;i++){
            scanf("%d",&arr[i]);
            if(getchar()=='\n') break;
        } 
        scanf("%d",&flag); 
        fun(arr,n);
    }
    return 0;
}


发表于 2021-07-29 14:50:21 回复(0)