1406:数列排序

1406: 数列排序

时间限制 : 1.000 sec  内存限制 : 128 MB

题目描述

将一正整数序列{K1,K2,...,K9}重新排列成一个新的序列。新序列中,比K1小的数都在K1的前面(左面),比K1大的数都在K1的后面(右面)。

输入

输入有多行,第一行为N表示行数,每行9个整数.

输出

输出N行,按要求进行排序的结果.

样例输入 Copy
2
6 8 9 1 2 5 4 7 3
3 5 8 9 1 2 6 4 7

样例输出 Copy
3 4 5 2 1 6 8 9 7
2 1 3 5 8 9 6 4 7

此贴为c语言初学者的复盘帖,方法并非最优解,仅作为可能的一种借鉴方法。

法1:“插入排序“‘

注意:这里并非算法中的插入排序!!!这里只是答主的一种说法!!!

思考:从左向右便利数组,遇到比K1小的数(这里称为Ki)便让0-(i-1)位上储存的数整体向右移动,并将Ki作为第0位储存,以此循环。

代码:#include <stdio.h>
#include <ctype.h>
int main()
{
    int N;
    scanf("%d",&N);
    getchar();
    for(int m=0;m<N;m++){
        int ch=getchar();
        char number[9]={0};
        int n=0;
        while(n<9){
        if(isdigit(ch)){                //isdigit判断是否为数字
            number[n++]=ch-48;
        }
        ch=getchar();            
        }
        int flag=number[0];//比对的标准值 
        int i;
        for(i=1;i<9;i++){
            if(number[i]<flag){
                int te=number[i];//储存这个小值 
                int temp=number[0];//储存第0位的值方便后续运算 
                int ten;
                int j;
                for(j=1;j<=i;j++){
                    ten=number[j];//暂时储存第j位值 
                    number[j]=temp;//将第j-1位的值赋第j位 
                    temp=ten;//储存第j位的值, 
                }
                number[0]=te;//不能直接=number[i],因为此时第i位储存的值实际为之前第i-1位储存的值 
            }
        }
        int k=0;
        for(k=0;k<8;k++){
        printf("%d ",number[k]);    
        }
        printf("%d\n",number[k]);
    } 
    return 0;

法2:选择在遍历过程中使用两个数组分别储存大于K1的值与小于K1的值

思维上比法1简单,所以这里不做赘述。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值