作C语言编程实现:对输入100个整数进行隆序(从大到小)排序,按每行十个数输出排序后的数据?

作C语言编程实现:对输入100个整数进行隆序(从大到小)排序,按每行十个数输出排序后的数据。

#include <stdio.h>
#define arrSize 100

typedef enum {swap_right,swap_left}swap_dir;
void init_arr(int* arr,int size);
void quickSort(int* arr, int size);
void print_arr(int* arr,int size);

int main() {
int arr[arrSize];
printf("请输入%d个整数(绝对值小于100000的整数,便于显示):\n",arrSize);
init_arr(arr, arrSize);
printf("完成输入!!!\n");
printf("开始排序\n");
quickSort(arr, arrSize);
printf("结束排序!!!\n");
printf("开始输出\n");
print_arr(arr, arrSize);
printf("结束输出!!!\n");
return 0;
}

void init_arr(int* arr, int size) {
for (int i = 0; i < size; i++) {
printf("请输入第 %d 个整数:",i+1);
scanf("%d",arr+i);
}
}

void quickSort(int* arr, int size) {
if (arr == NULL || size <= 1)
return;
int key_index = 0;
int key_num = arr[key_index];
int front_index = 0;
int back_index = size - 1;
swap_dir dir = swap_right;
while (front_index < back_index) {
if (dir == swap_right) {
if (arr[back_index] < key_num) {
arr[key_index] = arr[back_index];
arr[back_index] = key_num;
key_index = back_index;
front_index++;
dir = swap_left;
}
else {
back_index--;
}
}
else if (dir == swap_left) {
if (arr[front_index] > key_num) {
arr[key_index] = arr[front_index];
arr[front_index] = key_num;
key_index = front_index;
back_index--;
dir = swap_right;
}
else {
front_index++;
}
}
}
if (key_index > 0)
quickSort(arr,key_index);
if (key_index < size -1)
quickSort((arr+key_index + 1),(size - 1 - key_index));
}

void print_arr(int* arr, int size) {
for (int i = 0; i < size; i++) {
printf("%5d ",*(arr + i));
if ((i + 1) % 10 == 0) {
printf("\n");
}
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-01-13

#include <stdio.h>

void sort(int a[],int n)

{

    int i,j,t;

    for(i=0;i<n-1;i++)

    {

        for(j=0;j<n-i-1;++j)

        {

            if(a[j]<a[j+1])

            {

                t=a[j];

                a[j]=a[j+1];

                a[j+1]=t;

            }

        }

    }

}

int main()

{

    int a[100],i;

    for(i=0;i<100;++i)

        scanf("%d",&a[i]);

    sort(a,100);

    for(i=0;i<100;++i)

        printf("%d%c",a[i],(i+1)%10?' ':'\n');

    return 0;

}

第2个回答  2021-01-13
给你一个方法。使用初学者的,用冒泡排序排完放到一个整型数组,然后用判断到10就输出,然后输出换行符,如此类推
如有用,希望采纳追问

怎么排可以排看看吗TT

追答

冒泡排序,C语言书本有呀,还有百度也很多,你百度一下冒泡排序,理解一下,不要照搬,对自己学习有帮助的,工作面试的时候有时候会遇到这种题目。从大到小排序的原理就是两两比较,大的互换位置排上来,然后比完一轮。最小的已经垫底,继续排,以此类推

第3个回答  2021-01-13
#include<stdio.h>
void main()
{int num[100],i,j,tmp;
for(i=0;i<100;i++)scanf("%d",num+i);
for(i=0; i<100; i++)
{
for(j=i+1; j<100; j++)
{
if(num[i] > num[j])
{
tmp = num[i];
num[i] = num[j];
num[j] = tmp;
}
}
}
for(i=0;i<10;i++)
{for(j=0;j<10;j++)printf("%d ",num+10*i+j);printf("\n");}
}
纯手打本回答被提问者采纳
相似回答