排序数组,输出错误

时间:2015-08-30 09:49:17

标签: c arrays

今天我尝试制作一个程序(算法),搜索数组中的下一个数字,该数字大于找到的预览数并打印出来。

只有下一个数字不小时才能打印数字。

拳头示例: 4,2,3,9,4,6,5:输出应为:2,3,4,5。

第二个例子: 2,3,6,4,5,1输出应为1.

第三个例子: 1,9,8,7,6,5输出应为1.5。

示例,如果数组具有以下元素 1,4,2,3,6,4,5,8,6 ,则输出应为:

  1 2 3 4 5 6

如果数组具有以下元素 1,4,2,3 ,则输出应为:

  

1,2,3

以下是该计划:

#include <stdio.h>

int sortArr(int* array, int n, int next){
    int i,min = array[0];
    int lang;

    if(next==0){
        for (i=0;i<n;i++){
            if(array[i]<min){
                min=array[i];
            }
        }
    }

    if(next != 0){
        lang=next;
        while(lang==next){
            for (i=0;i<n;i++){
                if(array[i]<min){
                    min=array[i];
                }
            }

            lang++;

            if(lang== next){
                break;
            }
        }
        min=lang;
    }

    return min;
}

int main(void){
    int a[] = {1,4,2,3,6,4,5,8,6};
    int i,l = sizeof a / sizeof a[0];
    int next = 0;
    int min = sortArr(a,l,next);

    for(i=0;i<l;i++){
        if(min < a[i]){
            if(min < a[i]){
                min = sortArr(a,l,next);
                printf("%d ",min);
            }
            next++;
        }
    }
    printf("\n");
    return 0;
}

我认为,输出与这样一个事实有关,即只有当第一个元素是整个数组元素中最小的元素时它才能工作。

编辑: 我也尝试了以下内容:

#include <stdio.h>

int sortArr(int* array, int n, int next){
    int i,min = array[0];
    int lang;

    if(next==0){
        for (i=0;i<n;i++){
            if(array[i]<min){
                min=array[i];
            }
        }
    }

    if(next != 0){
        lang=next;
        while(lang==next){
            for (i=0;i<n;i++){
                if(array[i]<min){
                    min=array[i];
                }
            }

            lang++;

            if(lang== next){
                break;
            }
        }
        min=lang;
    }

    return min;
}

int main(void){
    int a[] = {2,1,3,4};
    /*int a[] = {9,4,2,3,6,4,5,8,6};*/
    int i,l = sizeof a / sizeof a[0];
    int next = 0;
    int min = sortArr(a,l,next);

    for(i=0;i<l;i++){
        if(min == a[i]){
            continue;
        }

        if(min < a[i]){
            next++;
            min = sortArr(a,l,next);

        }
        printf("%d ",min);
    }
    printf("\n");
    return 0;
}

输出应该 2,3,4 ,但我得到 2,2,3,4

3 个答案:

答案 0 :(得分:2)

这是一个简单的C代码,可以完成所需的操作。逻辑很简单。

#include<stdio.h>
#include<stdlib.h>
int is_valid(int,int [],int);
void main()
{
 int a[]={1,4,2,3,6,4,5,8,6 };
 int i;
 for(i=0;i<sizeof(a)/sizeof(a[0])-1;++i)
 {
   if(is_valid(i,a,sizeof(a)/sizeof(a[0])))
    printf("%d ",a[i]);
 }
 printf("%d ",a[i]);
}
int is_valid(int i,int a[],int l)
{
 int j;

 for(j=i+1;j<l;++j)
  if(a[j]>=a[i])
   continue;
  else return 0;
 return 1;
}

答案 1 :(得分:2)

#include <stdio.h>

int main(){
    int a[] = {10,2,6,3,5,9,8,4,7};

   int l = sizeof a / sizeof a[0];
   int i,j;
   int check=1;

    for(i=0;i<l;i++){
        check=1;
        for(j=i+1;j<l;j++){
            if(a[i]>=a[j]){
               check=0;
            }
        }
        if(check)
            printf("%d",a[i]);
    }
    printf("\n");
    return 0;
}

输出:2,3,4,7

答案 2 :(得分:1)

编辑时:调整以处理负数。

这是一个实现find_next函数的答案,当你传递数组时,最后找到的条目的索引和这个条目的值(或者在初始传递中为0)返回索引下一个条目或数组的长度:

#include <stdio.h>

int find_next(int a[], int n, int i, int p){
    int j,k,min,initialized = 0;
    for(j = i; j < n; j++){
        if(!initialized){
            if(a[j] > p){
                min = a[j];
                k = j;
                initialized = 1;
            }
        }
        else{
            if(p < a[j] && a[j] < min){
                min = a[j];
                k = j;
            }
        }
    }
    return initialized?k:n;
}

int main(void){
   int a[] = {10,2,6,3,-1,5,9,8,4,7};
   int i,j,p, n = sizeof(a)/sizeof(a[0]);

   //find and print first item
   p = a[0];
   i = 0;
   for(j = i+1; j < n; j++){
       if(a[j] < p){
           i = j;
           p = a[i];
       }
   }
   printf("%d ",p);

   //loop using find_next to find subsequent
   i = find_next(a,n,i+1,p);
   while(i < n){
       p = a[i];
       printf("%d ",p);
       i = find_next(a,n,i+1,p);
   }
   printf("\n");
   return 0;
}

运行时会打印-1 4 7