首页 > 试题广场 >

归并排序

[编程题]归并排序
  • 热度指数:2587 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
请编程实现一个整型数组的归并排序。本题会人工判断,请严格按照题目描述完成

输入描述:
一个无序的整型数组,输入格式见输入样例


输出描述:
一个有序的整型数组,输出格式见输出样例
示例1

输入

[3, 1, 4, 5, 17, 2, 12]

输出

[1, 2, 3, 4, 5, 12, 17]
C:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct{
    int num;
    char k;
    char l;
}List;
int CleanStr(char str[]){
    int i,len=strlen(str);
    for(i=0;i<len;i++){
        str[i]='\0';
    }
    return 1;
}
int main()
{
    char str[10000]={'\0'};
    while(fgets(str,10000,stdin)!=NULL){
        char *p=strchr(str,'\n');
        *p='\0';
        int i,j,k=0,len=strlen(str),numlist[10000],h=0,flag=0;
        char temp[100]={'\0'};
        for(i=0;i<len;){
            if(str[i]>='0'&&str[i]<='9'||str[i]=='-'){
                if(str[i]=='-'){
                    flag=1;
                    i++;
                }
                while(str[i]>='0'&&str[i]<='9'){
                    temp[k++]=str[i];
                    i++;
                }
                k=0;
                if(flag==1){
                    numlist[h++]=0-atoi(temp);
                    flag=0;
                }
                else{
                    numlist[h++]=atoi(temp);
                }
                CleanStr(temp);
            }
            else{
                i++;
            }
        }
        for(i=0;i<h;i++){
            for(j=0;j<h-i-1;j++){
                if(numlist[j]>numlist[j+1]){
                    k=numlist[j];
                    numlist[j]=numlist[j+1];
                    numlist[j+1]=k;
                }
            }
        }
        CleanStr(str);
        printf("[%d, ",numlist[0]);
        for(i=1;i<h-1;i++){
            printf("%d, ",numlist[i]);
        }
        printf("%d]\n",numlist[h-1]);
    }
}
发表于 2021-11-15 00:11:41 回复(0)