OJ 系列之整数排序

1、问题描述

实现输入一组大于等于0的整数,
根据从小到大的顺序排序后输出,排序后有连续数时,
只输出连续数中最小和最大的两个数。
一组大于等于0的整数,不考虑非法输入,各个整数之间以逗号(“,”)分隔,
输入字符串的总长度小于等于100个字节。

排序后的值,各个整数之间以空格分隔。

2、解题思路

  • 1、首先从输入字符串inputStr按规律取出数字,然后存储到一个数组中(大小为50,初始值全部为0);
  • 2、对数字进行冒泡法排序
  • 3、排序之后去掉连续的数字,留下连续数字首尾,用后面数覆盖舍去的数字。

3、代码实现

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void sort(int a[],int N)
{
/*冒泡法*/
    for(int i=0;i<N;i++) {
        for(int j=1;j<N;j++) {
             int temp;
             /*交换*/
            if(a[j-1]>a[j]) {
                temp=a[j-1];
                a[j-1]=a[j];
                a[j]=temp;
              }
         }
    }
}

void move(int a[],int curPos,int ContiIndex)
{
    /*后面的覆盖前面的数*/
    while(a[curPos+ContiIndex]!=-1) {
        a[curPos+1]=a[curPos+ContiIndex];
        curPos++;
    }
    a[curPos+1]=-1;
}

void SortForIngter(char *inputStr)
{
    if(!inputStr)
        return;
    /*考虑到字符串中有','因此数字长度不会大于50*/
    int a[50];
    int i = 0,index =0;
    /*1.用于存储字符串中整数*/
    for(int i=0;i<50;i++) {
         a[i]=-1;
     }
    int inputStrlen = strlen(inputStr);
    int temp = 0;
    /*不考虑非法输入*/
    for(i = 0;i<=inputStrlen;i++) {
        if(inputStr[i]==','||i==inputStrlen) {
            a[index] = temp;
            index ++;
            temp = 0;
        } else {
            temp = temp*10 + inputStr[i]-'0';
        }
    }
    /*2.排序*/
    sort(a,index);
    /*3.去连续,留首尾*/
    int curPos = 0;
    int j = 0;
    int ContiIndex = 0;
    while (a[curPos] != -1 && a[curPos+2] != -1) {     
       j=curPos;
       ContiIndex=0;
       while(a[j] != -1 && a[j+1] != -1) {
            if(a[j+1] == a[j]+1) {
                ContiIndex ++;
                j++;
            } else {
                break;
            }
       }
       if(ContiIndex>=2) {
            move(a,curPos,ContiIndex);
       }

       curPos++;
    }
    i = 0;
    while(a[i] != -1) {
        printf("%d ",a[i]);
        i ++;
    }
    printf("\n");
}
int main()
{
    char inputStr[101];
    gets(inputStr);
    SortForIngter(inputStr);
// getchar();
// getchar();
    return 0;
}

你可能感兴趣的:(OJ,整数排序)