C语言:选择法从大到小排序

【问题描述】选择法从大到小排序:输入一个正整数n,再输入n个整数,将它们从大到小排序后输出。

【输入形式】
【输出形式】
【样例输入】5

                4 5 1 7 9

【样例输出】The sorted order:9 7 5 4 1

img

#include <stdio.h>
 
int main()
 
{
 
int i,j,n,t;
 
printf("请输入个数:");
scanf("%d",&n);
int a[n];
 
for (i = 0; i < n; i++)
 
scanf("%d",&a[i]);
 
for (i = 0; i < n; i++)
 
{
 
for (j = i + 1; j < n;j++) //循环
 
if (a[i] < a[j]){
 
t = a[i];
 
a[i] = a[j];
 
a[j] = t;
 
}
 
}

printf("The sorted order:");
 
for (i = 0; i < n; i++)
 
printf("%d\t", a[i]);
 
return 0;
 
}
 

编译器支持C99标准时,可使用楼上答主的回答,编译器不支持的时候可以试试这个代码。


#include<stdio.h>
#define N 255
void Bubble_sort(int arr[], int size)
{
    int j,i,tem;
    for (i = 0; i < size-1;i ++)            //size-1是因为不用与自己比较,所以比的数就少一个
    {
        int count = 0;
        for (j = 0; j < size-1 - i; j++)    //size-1-i是因为每一趟就会少一个数比较
        {
            if (arr[j] < arr[j+1])            //这是降序排法,前一个数和后一个数比较,如果前数大则与后一个数换位置
            {
                tem = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = tem;
                count = 1;
                
            }
        }
        if (count == 0)                        //如果某一趟没有交换位置,则说明已经排好序,直接退出循环
                break;    
    }
 
}
int main()
{
    int arr[N];
    int i,num;

    scanf("%d", &num);                //排序个数
    
    for (i = 0; i < num; i++)        //接收用户的数值
    {
        scanf("%d", &arr[i]);
    }
 
    printf("The sorted order:");
    Bubble_sort(arr, num);
    for (i = 0; i < num; i++)
    {
        printf("%d ", arr[i]);
    }
    printf("\n");
    return 0;
}